{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1331faa1",
   "metadata": {},
   "source": [
    "可以在[Bookshop.org](https://bookshop.org/a/98697/9781098155438) 和\n",
    "[Amazon](https://www.amazon.com/_/dp/1098155432?smid=ATVPDKIKX0DER&_encoding=UTF8&tag=oreilly20-20&_encoding=UTF8&tag=greenteapre01-20&linkCode=ur2&linkId=e2a529f94920295d27ec8a06e757dc7c&camp=1789&creative=9325)获取纸制版和电子版的*Think Python 3e*."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8119ba50",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "from os.path import basename, exists\n",
    "\n",
    "def download(url):\n",
    "    filename = basename(url)\n",
    "    if not exists(filename):\n",
    "        from urllib.request import urlretrieve\n",
    "\n",
    "        local, _ = urlretrieve(url, filename)\n",
    "        print(\"Downloaded \" + str(local))\n",
    "    return filename\n",
    "\n",
    "download('https://gitee.com/regentsai/Think_Python_3e_CN/blob/master/thinkpython.py');\n",
    "download('https://gitee.com/regentsai/Think_Python_3e_CN/blob/master/diagram.py');\n",
    "download('https://gitee.com/regentsai/Think_Python_3e_CN/blob/master/jupyturtle.py');\n",
    "\n",
    "import thinkpython"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75b60d6c",
   "metadata": {},
   "source": [
    "# 第5章:条件和递归\n",
    "\n",
    "本章的话题主要是`if`语句，它根据程序的状态执行不同的代码。有了`if`语句，我们将能够探索计算中最强大的概念：**递归recursion**。\n",
    "\n",
    "但是我们会以3个新功能开始本章的内容：求模运算符，布尔表达式，以及逻辑运算符。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ab7caf4",
   "metadata": {},
   "source": [
    "## 整数除法和求模\n",
    "\n",
    "回忆一下整数除法运算符`//`，将两个数字相除，然后向下取整。例如，假设一部电影的时长为105分钟，你可能想要知道对应是多少小时。\n",
    "\n",
    "常规的除法返回浮点数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "30bd0ba7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.75"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "minutes = 105\n",
    "minutes / 60"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f224403",
   "metadata": {},
   "source": [
    "但我们通常不会用小数来描述小时数。整数除法则对结果向下取整："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "451e3198",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "minutes = 105\n",
    "hours = minutes // 60\n",
    "hours"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bfa9b0cf",
   "metadata": {},
   "source": [
    "要计算余数，你可以减去x小时对应的分钟数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "64b92876",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "remainder = minutes - hours * 60\n",
    "remainder"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05caf27f",
   "metadata": {},
   "source": [
    "或者你可以使用**求模运算符modulus operator**，`%`，计算两个数相除的余数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0a593844",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "remainder = minutes % 60\n",
    "remainder"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18c1e0d0",
   "metadata": {},
   "source": [
    "求模运算符比它看上去更加有用。例如，它可以检查一个数能否被另一个数整除，如果`x % y`为0,则`x`可以被`y`整除。\n",
    "\n",
    "同时，它也可以提取数字最右边的数。例如，`x % 10`可以得到十进制数`x`的最后一位数字（个位数字）。同理，`x % 100`计算数字的最后两位数字。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5bd341f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = 123\n",
    "x % 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "367fce0c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "23"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x % 100"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2344fc0",
   "metadata": {},
   "source": [
    "最后，求模运算符可以计算“时钟算术”。例如，如果一个活动从上午11点开始，持续3小时，我们可以利用求模运算符算出12小时制下的结束时间。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "db33a44d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "start = 11\n",
    "duration = 3\n",
    "end = (start + duration) % 12\n",
    "end"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "351c30df",
   "metadata": {},
   "source": [
    "该活动将在下午2点结束。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ed1b58b",
   "metadata": {},
   "source": [
    "## 布尔表达式\n",
    "\n",
    "**布尔表达式boolean expression**是值为真或假的表达式。例如，以下表达式使用双等号运算符`==`，比较两个值是否相等，如果相等则表达式值为`True`，否则为`False`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "85589d38",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "5 == 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "3c9c8f61",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "5 == 7"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41fbc642",
   "metadata": {},
   "source": [
    "用单个等号(`=`)，不使用两个等号(`==`)进行比较是常见的错误。记住`=`将值赋值给变量，而`==`将两个值进行比较。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c0e51bcc",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = 5\n",
    "y = 7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a6be44db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x == y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3ec6b48",
   "metadata": {},
   "source": [
    "`True`和`False`是`bool`类型的特殊值，它们不是字符串："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "90fb1c9c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "bool"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "c1cae572",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "bool"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a3c87fa",
   "metadata": {},
   "source": [
    "译注：`True`和`False`也是Python的关键字，无须导入即可使用。注意首字母必须大写。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "451b2e8d",
   "metadata": {},
   "source": [
    "`==`运算符是**关系运算符relational operators**之一，其他关系运算符包括："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "c901fe2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x != y               # x不等于y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "1457949f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x > y                # x比y大"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "56bb7eed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x < y               # x比y小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "1cdcc7ab",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x >= y               # x大于等于y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "df1a1287",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x <= y               # x小于等于y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "db5a9477",
   "metadata": {},
   "source": [
    "## 逻辑运算符\n",
    "\n",
    "要将两个布尔表达式结合起来，我们可以使用**逻辑运算符logical operators**。最常用的逻辑运算符是`and`，`or`和`not`。\n",
    "\n",
    "这些运算符的含义与英文相似。例如以下表达式只在`x`>0*且*`x`<10时为真。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "848c5f2c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x > 0 and x < 10"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8c14026",
   "metadata": {},
   "source": [
    "以下表达式在至少有一个条件为真时值为真，也即如果数字可以被2*或*3整除时为真："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "eb66ee6a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x % 2 == 0 or x % 3 == 0"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3bd0ef52",
   "metadata": {},
   "source": [
    "最后，`not`运算符对布尔表达式求反，所以如果`x > y`为`True`，则`not x > y`的值为`False`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "6de8b97c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "not x > y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc6098c2",
   "metadata": {},
   "source": [
    "严格来讲，逻辑运算符的运算对象必须是布尔表达式，但Python不是特别严格。所有非零数字被解释为`True`："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "add63275",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "42 and True"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "102ceab9",
   "metadata": {},
   "source": [
    "这种灵活性很有用，但其中的一些微妙之处可能令人困惑，你可能想要避免。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b0f2dc1",
   "metadata": {},
   "source": [
    "## if语句\n",
    "\n",
    "为了编写有用的程序，我们需要有检查条件，并根据条件改变程序行为的能力。**条件语句Conditional statements**提供了这个能力。最简单的`if`语句如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "80937bef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x是正数\n"
     ]
    }
   ],
   "source": [
    "if x > 0:\n",
    "    print('x是正数')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "973f705e",
   "metadata": {},
   "source": [
    "`if`是Python的关键字。`if`语句的结构与函数定义语句相同：头部和主体部分。主体部分必须缩进，因此也称为**块block**。\n",
    "\n",
    "`if`关键字后的布尔表达式称作**条件condition**。如果条件为真，执行缩进块中的语句。如果条件为假，则不执行缩进块中的语句。\n",
    "\n",
    "缩进块中的语句数量没有限制，但至少要有1个。有时，缩进块里面需要不执行任何东西，可能是你还没准备写的代码片段。在这种情况下，你可以使用`pass`语句作为占位符，它不执行任何动作。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "bc74a318",
   "metadata": {},
   "outputs": [],
   "source": [
    "if x < 0:\n",
    "    pass          # TODO: 需要处理负数情况!"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adf3f6c5",
   "metadata": {},
   "source": [
    "习惯上，`TODO`是一个提示注释，提醒你稍后需要做些事。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eb39bcd9",
   "metadata": {},
   "source": [
    "## `else`子句\n",
    "\n",
    "`if`语句可以有第二个部分，叫作`else`子句(clause)。\n",
    "\n",
    "else的语法像这样："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "d16f49f2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x是奇数\n"
     ]
    }
   ],
   "source": [
    "if x % 2 == 0:\n",
    "    print('x是偶数')\n",
    "else:\n",
    "    print('x是奇数')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7dc8943",
   "metadata": {},
   "source": [
    "如果条件为真，执行第一个缩进的语句块；否则，执行第二个缩进的语句块。\n",
    "\n",
    "在上例中，如果`x`是偶数，`x`与`2`的除法余数为`0`，则条件为真，程序显示`x是偶数`。如果`x`是奇数，`x`与`2`的除法余数不为`0`，则条件为假，程序显示`x是奇数`。\n",
    "\n",
    "由于条件必须为真或者假，会且仅会执行一个缩进块。这些缩进块称作**分支branches**。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20c8adb6",
   "metadata": {},
   "source": [
    "## 链式条件语句\n",
    "\n",
    "有时会有超过两种可能，我们需要超过两个分支。**链式条件语句chained conditional**可以表达这种逻辑，其中包含`elif`子句。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "309fccb8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x比y小\n"
     ]
    }
   ],
   "source": [
    "if x < y:\n",
    "    print('x比y小')\n",
    "elif x > y:\n",
    "    print('x比y大')\n",
    "else:\n",
    "    print('x等于y')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "46916379",
   "metadata": {},
   "source": [
    "`elif`是“else if”的缩写。`elif`子句的数量没有限制。`else`子句必须在条件语句的结尾，但不必须存在`else`子句。\n",
    "\n",
    "每个条件是按顺序执行的。如果第一个条件为假，将检查第二个，以此类推。如果某一个条件为真，执行对应的分支，然后`if`语句结束。即使后续其他条件为真，只会执行第一个为真的分支。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0c0b9dd",
   "metadata": {},
   "source": [
    "## 嵌套条件语句\n",
    "\n",
    "一个条件语句可以嵌套在另一个条件语句内。我们可以像下面一样重写之前的条件语句："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "d77539cf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x小于y\n"
     ]
    }
   ],
   "source": [
    "if x == y:\n",
    "    print('x等于y')\n",
    "else:\n",
    "    if x < y:\n",
    "        print('x小于y')\n",
    "    else:\n",
    "        print('x大于y')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29f67a0a",
   "metadata": {},
   "source": [
    "外层的`if`语句包含两个分支。第一个分支包含一个简单的语句；第二个分支包含另一个`if`语句，它自己包含两个分支。这两个分支是简单的语句，但也可以再嵌套条件语句。\n",
    "\n",
    "尽管语句的缩进让结构更明确，**嵌套条件语句nested conditionals**本身难以阅读。我建议你在条件允许的时候避免嵌套条件语句。\n",
    "\n",
    "逻辑运算符通常可以简化嵌套条件语句。以下是嵌套条件语句的例子："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "91cac1a0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x是正的个位数。\n"
     ]
    }
   ],
   "source": [
    "if 0 < x:\n",
    "    if x < 10:\n",
    "        print('x是正的个位数。')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5292eb11",
   "metadata": {},
   "source": [
    "打印语句只在两个条件都为真时执行，因此使用`and`运算符有相同的效果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "f8ba1724",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x是正的个位数。\n"
     ]
    }
   ],
   "source": [
    "if 0 < x and x < 10:\n",
    "    print('x是正的个位数。')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd8e808a",
   "metadata": {},
   "source": [
    "对于这种条件，Python提供更简洁的方式："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "014cd6f4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x是正的个位数。\n"
     ]
    }
   ],
   "source": [
    "if 0 < x < 10:\n",
    "    print('x是正的个位数。')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1131ccab",
   "metadata": {},
   "source": [
    "译注：在Python中，`0<x<10`是合法的表达式，同样，`x==y==7`也是合法的。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "db583cd9",
   "metadata": {},
   "source": [
    "## 递归\n",
    "\n",
    "函数调用自身在语法上是合法的。这个功能为什么强大可能不明显，但这可能是编程中最有魔力的一个东西。下面是一个例子："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "17904e98",
   "metadata": {},
   "outputs": [],
   "source": [
    "def countdown(n):\n",
    "    if n <= 0:\n",
    "        print('发射!')\n",
    "    else:\n",
    "        print(n)\n",
    "        countdown(n-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c88e0dc7",
   "metadata": {},
   "source": [
    "如果`n`<=0，`countdown`输出单词“发射!”；否则输出`n`并调用`countdown`自身，将`n-1`作为实参传递给它。\n",
    "\n",
    "我们来看看提供实参`3`，调用这个函数会发生什么。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "6c1e32e2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "2\n",
      "1\n",
      "发射!\n"
     ]
    }
   ],
   "source": [
    "countdown(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f3c87ec",
   "metadata": {},
   "source": [
    "`countdown`的执行以`n=3`开始，由于`n`>0，函数将显示`3`，然后调用自身；\n",
    "\n",
    "> `countdown`的执行以`n=2`开始，由于`n`>0，函数将显示`2`，然后调用自身；\n",
    "> > `countdown`的执行以`n=1`开始，由于`n`>0，函数将显示`1`，然后调用自身；\n",
    "> > > `countdown`的执行以`n=0`开始，由于`n`不大于0，函数将显示`发射！`，然后退出\n",
    "> > > \n",
    "> > 接收`n=1`的`countdown`退出\n",
    "> > \n",
    "> 接收`n=2`的`countdown`退出\n",
    "\n",
    "接收`n=3`的`countdown`退出"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "782e95bb",
   "metadata": {},
   "source": [
    "调用自身的函数是**递归的recursive**。例如，我们可以写一个函数，打印字符串`n`次。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "1bb13f8e",
   "metadata": {},
   "outputs": [],
   "source": [
    "def print_n_times(string, n):\n",
    "    if n > 0:\n",
    "        print(string)\n",
    "        print_n_times(string, n-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73d07c17",
   "metadata": {},
   "source": [
    "若`n`为正数，`print_n_times`打印`string`的值，然后调用自身，将`n-1`作为实参传递给它。\n",
    "\n",
    "若`n`不是正数，条件为假，`print_n_times`不做任何事。\n",
    "\n",
    "以下是调用它的结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "e7b68c57",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Spam \n",
      "Spam \n",
      "Spam \n",
      "Spam \n"
     ]
    }
   ],
   "source": [
    "print_n_times('Spam ', 4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1fb55a78",
   "metadata": {},
   "source": [
    "对于类似的简单示例，使用`for`可能更简单。稍后我们可以看到一些例子，用`for`循环难以编写，而用递归很容易。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c652c739",
   "metadata": {},
   "source": [
    "## 递归函数的栈图\n",
    "\n",
    "以下是我们以`n = 3`调用的`countdown`函数的栈图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "643148da",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "from diagram import make_frame, Stack\n",
    "\n",
    "frames = []\n",
    "for n in [3,2,1,0]:\n",
    "    d = dict(n=n)\n",
    "    frame = make_frame(d, name='countdown', dy=-0.3, loc='left')\n",
    "    frames.append(frame)\n",
    "\n",
    "stack = Stack(frames, dy=-0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "a8510119",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMIAAADgCAYAAABRhbkMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAVoklEQVR4nO3df0hUC/7/8edMgzM17HCVKQ3ltv0z1jBat9yRRtM1RyZh2bsNM/3AipJYliS5ZEu0rVH5V3ChsiUuCdmGG+yWitxtcWlG/7ilGLHr9Q9bqcjiOqSpMbf8kZh+/ojm3r7dyvabY/fu6/HXHOd4zpuTzzknOMMxTE9PTyPyP8441wOIfAgUgggKQQRQCCKAQhABFIIIoBBEAIUgAigEEUAhiAAKQQRQCCKAQhABFIIIoBBEAIUgAigEEUAhiAAKQQRQCCKAQhABwDTXA8hzjx8/nusRfhR+9rOfzcp2dUYQQSGIAApBBFAIIoBCEAEUggigEEQAhSACKAQR4CccwokTJxgYGHjt+4cPH2bfvn1xnEhe+PTTT1mzZg05OTn4fD66urrmeqSf7i0WJ06cwOv1smjRorkeRf4ff/7zn/noo48A+Pvf/05ZWRlfffXVnM4U9zNCe3s7a9euZcWKFWRmZtLU1MSNGzdYs2YNmZmZuN1url27BkBvby92uz32u0+ePMFgMMSWDQYDx44dIzs7m6VLl1JbWwvA0aNHiUQiBAIBVq5cSWdnJ9FolEAggNPpxOfzcfv27Ze2W1paisvlwuVyceTIEQB6enpIT08HYHp6GrvdzsGDBwEIh8MUFhYCsGPHDnbv3o3X68XhcOD3+5mYmJi1Y2iz2Th+/DgFBQVkZGRQV1c3a/uaid7eXi5cuEB3dzdTU1NvXf9FBADRaBSjce4vTOJ6RhgeHmbDhg00NDTg8XiYmppicHCQrKwsampq8Pl8XL16lUAg8NIf6ptYLBY6Ojq4efMmbrebbdu2cejQIc6ePculS5dwuVwAVFRUYLPZ6O7uZnBwkFWrVrFx40YAqqqqmJiYoKuri7GxMXJzc3E6nQSDQcbGxrh//z5DQ0M4HA5aWloACIVCeL3e2BydnZ2Ew2ESEhLIy8ujvr6eLVu2vOcj+B2z2Uxrays9PT0UFBSwefNmTKa5OcEvXLgQq9VKc3MzHR0dZGdns2zZsjf+gf/2t7+NnQUaGhriNeprxfXItbe343Q68Xg8ABiNRvr7+0lISMDn8wGQm5vLokWL6OrqYvHixW/dZklJCQDLly/HZDLx4MED0tLSXlmvtbWVU6dOAWC32/H7/bH3QqEQJ0+exGg0YrVa2b59O6FQiGAwSGFhIaFQiKGhIbZu3cqZM2eIRqOEQiFOnz4d24bf72f+/PkAuN1u7ty5818epZnZtGkTAOnp6ZhMJvr7+0lNTX1pnevXrxOJRGZ1ju9LTU3l0aNHNDc3Ew6HCQaDpKSk/OC6Z86cAeAvf/kLf/zjH6mvr4/bnD9kzs9J09PTL13uvGAwGDCZTDx79iz2s/Hx8VfWs1gssdfz5s1jcnLytft5lxleLHu9XkKhEOFwGK/XS0FBAQ0NDdy9e5fVq1e/8xzvi9lsjr02Go2zvr/ZUlJSwldffcXQ0NCczhHXM4LH42HXrl20tbXFLo1SUlJ4+vQpLS0trFu3jra2NgYGBsjIyMBsNjM5ORm7Vj9//vyM92Wz2YhGo7HlwsJCamtrycnJYXh4mMbGRoLBIABFRUXU1NTg8XgYHR2lrq6OAwcOAM9D2Lt3L0lJSTgcDrxeL2VlZeTn538Q17Zv4na747KfkZERrly5Ql9fH4mJieTl5b320ujbb79lZGQkdrb/8ssvSUpKIikpKS6zvk5cQ0hMTKSxsZGKigoeP36MwWCgqqqK+vp6ysvLGRkZwWKxcPHiRaxWKwDV1dUUFxeTlpZGcXHxjPdVXl7Ozp07WbBgAefOnaOyspLS0lKcTidLliyhqKgotm5lZSV79uwhIyMDgGAwSCAQACA5OZnk5GSysrIAyM/PJxKJsH///vd1WH70Hj58yOjoKOvXr3/r/w2+/fZbtm7dyvj4OEajEbvdzt/+9rcfvCqIJ4Oes/xh0DfUZkbfUBOZRQpBBIUgAigEEUAhiAAKQQRQCCKAQhABFIIIoBBEAIUgAuheIxFAZwQRQCGIAApBBFAIIoBCEAEUggigEEQAhSACKAQRQCGIAApBBFAIIoBCEAEUggigEEQAhSACKAQRQCGIAApBBPgJP172x0bPR5gZPR9BZBYpBBEUggigEEQAhSACKAQRQCGIAApBBFAIIsBPOIQTJ04wMDDw2vcPHz7Mvn374jiRAIyPj7NlyxY++eQTcnJy2LBhA/fu3Zvrsf53Q5C5s2PHDv71r39x7do11q9fT3l5+VyPFP8Q2tvbWbt2LStWrCAzM5OmpiZu3LjBmjVryMzMxO12c+3aNQB6e3ux2+2x333y5AkGgyG2bDAYOHbsGNnZ2SxdupTa2loAjh49SiQSIRAIsHLlSjo7O4lGowQCAZxOJz6fj9u3b7+03dLSUlwuFy6XiyNHjgDQ09NDeno6ANPT09jtdg4ePAhAOBymsLAQeP4Pu3v3brxeLw6HA7/fz8TExKwdQ5vNxvHjxykoKCAjI4O6urpZ29dM9Pb2cuHCBbq7u5mamnrjuhaLBZ/PF/t3/MUvfkFvb28cpnyzuN50Nzw8zIYNG2hoaMDj8TA1NcXg4CBZWVnU1NTg8/m4evUqgUDgpT/UN7FYLHR0dHDz5k3cbjfbtm3j0KFDnD17lkuXLuFyuQCoqKjAZrPR3d3N4OAgq1atYuPGjQBUVVUxMTFBV1cXY2Nj5Obm4nQ6CQaDjI2Ncf/+fYaGhnA4HLS0tAAQCoXwer2xOTo7OwmHwyQkJJCXl0d9fT1btmx5z0fwO2azmdbWVnp6eigoKGDz5s2YTHNzD+XChQuxWq00NzfT0dFBdnY2y5Ytw2h8++fsF198QXFxcRymfLO4Hrn29nacTicejwcAo9FIf38/CQkJ+Hw+AHJzc1m0aBFdXV0sXrz4rdssKSkBYPny5ZhMJh48eEBaWtor67W2tnLq1CkA7HY7fr8/9l4oFOLkyZMYjUasVivbt28nFAoRDAYpLCwkFAoxNDTE1q1bOXPmDNFolFAoxOnTp2Pb8Pv9zJ8/HwC3282dO3f+y6M0M5s2bQIgPT0dk8lEf38/qampL61z/fp1IpHIrM7xfampqTx69Ijm5mbC4TDBYJCUlJTXrv/5559z584dTpw4EbcZX2fOb8Oenp5+6XLnBYPBgMlk4tmzZ7GfjY+Pv7KexWKJvZ43bx6Tk5Ov3c+7zPBi2ev1cvnyZYaHh6murubWrVs0NDRw9+5dVq9e/c5zvC9mszn22mg0zvr+3rfq6mq+/PJLmpqaWLBgwVyPE98QPB4Pu3btoq2tLXZplJKSwtOnT2lpaWHdunW0tbUxMDBARkYGZrOZycnJ2LX6+fPnZ7wvm81GNBqNLRcWFlJbW0tOTg7Dw8M0NjYSDAYBKCoqoqamBo/Hw+joKHV1dRw4cAB4HsLevXtJSkrC4XDg9XopKysjPz9/Rqf+ueR2u+Oyn5GREa5cuUJfXx+JiYnk5eW98dLoT3/6E5cuXaKpqYmPPvooLjO+TVxDSExMpLGxkYqKCh4/fozBYKCqqor6+nrKy8sZGRnBYrFw8eJFrFYr8PyTo7i4mLS0tHe6liwvL2fnzp0sWLCAc+fOUVlZSWlpKU6nkyVLllBUVBRbt7Kykj179pCRkQFAMBgkEAgAkJycTHJyMllZWQDk5+cTiUTYv3//+zosP3oPHz5kdHSU9evXv/X/Bn19ffzhD3/g5z//Ob/61a8ASEhIoLW1NV7j/iA9VfMDoW+ozYy+oSYyixSCCApBBFAIIoBCEAEUggigEEQAhSACKAQRQCGIAApBBNC9RiKAzggigEIQARSCCKAQRACFIAIoBBFAIYgACkEEUAgigEIQARSCCKAQRACFIAIoBBFAIYgACkEEUAgigEIQARSCCPABPDpKntPzEWZGz0cQmUUKQQSFIAIoBBFAIYgACkEEUAgigEIQARSCCPATDuHEiRMMDAy89v3Dhw+zb9++OE4kAL///e9xuVzYbDa6u7vnepyY/9kQZG785je/4Z///Ccff/zxXI/ykriH0N7eztq1a1mxYgWZmZk0NTVx48YN1qxZQ2ZmJm63m2vXrgHQ29uL3W6P/e6TJ08wGAyxZYPBwLFjx8jOzmbp0qXU1tYCcPToUSKRCIFAgJUrV9LZ2Uk0GiUQCOB0OvH5fNy+fful7ZaWluJyuXC5XBw5cgSAnp4e0tPTAZiensZut3Pw4EEAwuEwhYWFAOzYsYPdu3fj9XpxOBz4/X4mJiZm7RjabDaOHz9OQUEBGRkZ1NXVzdq+ZqK3t5cLFy7Q3d3N1NTUG9fNyckhNTU1TpPNXFxvuhseHmbDhg00NDTg8XiYmppicHCQrKwsampq8Pl8XL16lUAg8NIf6ptYLBY6Ojq4efMmbrebbdu2cejQIc6ePculS5dwuVwAVFRUxE7Hg4ODrFq1io0bNwJQVVXFxMQEXV1djI2NkZubi9PpJBgMMjY2xv379xkaGsLhcNDS0gJAKBTC6/XG5ujs7CQcDpOQkEBeXh719fVs2bLlPR/B75jNZlpbW+np6aGgoIDNmzdjMs3NPZQLFy7EarXS3NxMR0cH2dnZLFu2DKPxx3PBEdcj197ejtPpxOPxAGA0Gunv7ychIQGfzwdAbm4uixYtoquri8WLF791myUlJQAsX74ck8nEgwcPSEtLe2W91tZWTp06BYDdbsfv98feC4VCnDx5EqPRiNVqZfv27YRCIYLBIIWFhYRCIYaGhti6dStnzpwhGo0SCoU4ffp0bBt+v5/58+cD4Ha7uXPnzn95lGZm06ZNAKSnp2Mymejv73/lk/b69etEIpFZneP7UlNTefToEc3NzYTDYYLBICkpKXHb//+POb8Ne3p6+qXLnRcMBgMmk4lnz57FfjY+Pv7KehaLJfZ63rx5TE5OvnY/7zLDi2Wv18vly5cZHh6murqaW7du0dDQwN27d1m9evU7z/G+mM3m2Guj0Tjr+/upi2sIHo+HXbt20dbWFrs0SklJ4enTp7S0tLBu3Tra2toYGBggIyMDs9nM5ORk7Fr9/PnzM96XzWYjGo3GlgsLC6mtrSUnJ4fh4WEaGxsJBoMAFBUVUVNTg8fjYXR0lLq6Og4cOAA8D2Hv3r0kJSXhcDjwer2UlZWRn5//wZ/63W53XPYzMjLClStX6OvrIzExkby8PF0avUliYiKNjY1UVFTw+PFjDAYDVVVV1NfXU15ezsjICBaLhYsXL2K1WgGorq6muLiYtLQ0iouLZ7yv8vJydu7cyYIFCzh37hyVlZWUlpbidDpZsmQJRUVFsXUrKyvZs2cPGRkZAASDQQKBAADJyckkJyeTlZUFQH5+PpFIhP3797+vw/Kj9/DhQ0ZHR1m/fv1bA9i7dy//+Mc/6O/v59e//jVWq5Wvv/46jtP+MD1V8wOhb6jNjL6hJjKLFIIICkEEUAgigEIQARSCCKAQRACFIAIoBBFAIYgACkEE0L1GIoDOCCKAQhABFIIIoBBEAIUgAigEEUAhiAAKQQRQCCKAQhABFIIIoBBEAIUgAigEEUAhiAAKQQRQCCKAQhABFIII8AE8Okqe0/MRZkbPRxCZRQpBBIUgAigEEUAhiAAKQQRQCCKAQhABFIII8BMO4cSJEwwMDLz2/cOHD7Nv3744TiQv3L59G6/XyyeffMIvf/lL/vOf/8z1SP+7Icjc+eyzz9i5cyf//ve/+eyzzygrK5vrkeIfQnt7O2vXrmXFihVkZmbS1NTEjRs3WLNmDZmZmbjdbq5duwZAb28vdrs99rtPnjzBYDDElg0GA8eOHSM7O5ulS5dSW1sLwNGjR4lEIgQCAVauXElnZyfRaJRAIIDT6cTn83H79u2XtltaWorL5cLlcnHkyBEAenp6SE9PB2B6ehq73c7BgwcBCIfDFBYWArBjxw52796N1+vF4XDg9/uZmJiYtWNos9k4fvw4BQUFZGRkUFdXN2v7mone3l4uXLhAd3c3U1NTb1z34cOHfP3112zatAmATz/9lHv37nHv3r14jPpacb3pbnh4mA0bNtDQ0IDH42FqaorBwUGysrKoqanB5/Nx9epVAoHAS3+ob2KxWOjo6ODmzZu43W62bdvGoUOHOHv2LJcuXcLlcgFQUVGBzWaju7ubwcFBVq1axcaNGwGoqqpiYmKCrq4uxsbGyM3Nxel0EgwGGRsb4/79+wwNDeFwOGhpaQEgFArh9Xpjc3R2dhIOh0lISCAvL4/6+nq2bNnyno/gd8xmM62trfT09FBQUMDmzZsxmebmHsqFCxditVppbm6mo6OD7Oxsli1bhtH46ufsN998Q0pKSmxWg8FAWloa33zzDUuWLIn36DFxPXLt7e04nU48Hg8ARqOR/v5+EhIS8Pl8AOTm5rJo0SK6urpYvHjxW7dZUlICwPLlyzGZTDx48IC0tLRX1mttbeXUqVMA2O12/H5/7L1QKMTJkycxGo1YrVa2b99OKBQiGAxSWFhIKBRiaGiIrVu3cubMGaLRKKFQiNOnT8e24ff7mT9/PgBut5s7d+78l0dpZl58oqanp2Mymejv7yc1NfWlda5fv04kEpnVOb4vNTWVR48e0dzcTDgcJhgMkpKS8sp63z+rw/Oz7Vyb89uwp6enXzkw8PxgmUwmnj17FvvZ+Pj4K+tZLJbY63nz5jE5Ofna/bzLDC+WvV4vly9fZnh4mOrqam7dukVDQwN3795l9erV7zzH+2I2m2OvjUbjrO/vfUlLSyMSiTA5OYnJZGJ6epq+vr4f/PCKp7iG4PF42LVrF21tbbFLo5SUFJ4+fUpLSwvr1q2jra2NgYEBMjIyMJvNTE5Oxq7Vz58/P+N92Ww2otFobLmwsJDa2lpycnIYHh6msbGRYDAIQFFRETU1NXg8HkZHR6mrq+PAgQPA8xD27t1LUlISDocDr9dLWVkZ+fn5P3jq/5C43e647GdkZIQrV67Q19dHYmIieXl5r700WrhwIZmZmfz1r3+lpKSEpqYmPv744zm9LII4h5CYmEhjYyMVFRU8fvwYg8FAVVUV9fX1lJeXMzIygsVi4eLFi1itVgCqq6spLi4mLS2N4uLiGe+rvLycnTt3smDBAs6dO0dlZSWlpaU4nU6WLFlCUVFRbN3Kykr27NlDRkYGAMFgkEAgAEBycjLJyclkZWUBkJ+fTyQSYf/+/e/rsPzoPXz4kNHRUdavX//aAL7v5MmT/O53v+Pzzz/HZrPxxRdfxGnS19NTNT8Q+obazOgbaiKzSCGIoBBEAIUgAigEEUAhiAAKQQRQCCKAQhABFIIIoBBEAN1rJALojCACKAQRQCGIAApBBFAIIoBCEAEUggigEEQAhSACKAQRQCGIAApBBFAIIoBCEAEUggigEEQAhSACKAQRQCGIAApBBFAIIgD8HwMgKE78Rir4AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 174x204 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from diagram import diagram, adjust\n",
    "\n",
    "\n",
    "width, height, x, y = [1.74, 2.04, 1.05, 1.77]\n",
    "ax = diagram(width, height)\n",
    "bbox = stack.draw(ax, x, y)\n",
    "# adjust(x, y, bbox)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9282331b",
   "metadata": {},
   "source": [
    "4个`countdown`帧有不同的参数`n`。栈底`n=0`的帧称作**基准条件base case**。它不进行递归调用，因此在下方没有更多的帧。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "a2a376b3",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 353x154 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from diagram import make_frame, Stack\n",
    "from diagram import diagram, adjust\n",
    "\n",
    "frames = []\n",
    "for n in [2,1,0]:\n",
    "    d = dict(string='Hello', n=n)\n",
    "    frame = make_frame(d, name='print_n_times', dx=1.3, loc='left')\n",
    "    frames.append(frame)\n",
    "\n",
    "stack = Stack(frames, dy=-0.5)\n",
    "\n",
    "width, height, x, y = [3.53, 1.54, 1.54, 1.27]\n",
    "ax = diagram(width, height)\n",
    "bbox = stack.draw(ax, x, y)\n",
    "# adjust(x, y, bbox)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "37bbc2b8",
   "metadata": {},
   "source": [
    "## 无限递归\n",
    "\n",
    "如果一个递归始终无法到达基准条件，它将永远进行递归调用，程序永远不会终止。这被称为**无限递归infinite recursion**，通常这不是一个好主意。以下是一个无限递归的例子。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "af487feb",
   "metadata": {},
   "outputs": [],
   "source": [
    "def recurse():\n",
    "    recurse()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "450a20ac",
   "metadata": {},
   "source": [
    "每当调用`recurse`时，它会调用自身，创建另一个帧。在Python中，同时能够堆叠的帧数是有限的。如果程序超过这个限制，将导致运行时错误。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "e5d6c732",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Exception reporting mode: Context\n"
     ]
    }
   ],
   "source": [
    "%xmode Context"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "22454b51",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "ename": "RecursionError",
     "evalue": "maximum recursion depth exceeded",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mRecursionError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[43], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m recurse()\n",
      "Cell \u001b[0;32mIn[41], line 2\u001b[0m, in \u001b[0;36mrecurse\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecurse\u001b[39m():\n\u001b[0;32m----> 2\u001b[0m     recurse()\n",
      "Cell \u001b[0;32mIn[41], line 2\u001b[0m, in \u001b[0;36mrecurse\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecurse\u001b[39m():\n\u001b[0;32m----> 2\u001b[0m     recurse()\n",
      "    \u001b[0;31m[... skipping similar frames: recurse at line 2 (2965 times)]\u001b[0m\n",
      "Cell \u001b[0;32mIn[41], line 2\u001b[0m, in \u001b[0;36mrecurse\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrecurse\u001b[39m():\n\u001b[0;32m----> 2\u001b[0m     recurse()\n",
      "\u001b[0;31mRecursionError\u001b[0m: maximum recursion depth exceeded"
     ]
    }
   ],
   "source": [
    "%%expect RecursionError\n",
    "\n",
    "recurse()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "39fc5c31",
   "metadata": {},
   "source": [
    "回溯信息表明当错误发生时，栈中大约有3000个帧。\n",
    "\n",
    "如果你偶然遇到了无限递归，检查你的函数，确保存在基准条件，不进行递归调用。如果确实有基准条件，检查你是否保证能够到达该条件。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45299414",
   "metadata": {},
   "source": [
    "## 键盘输入\n",
    "\n",
    "我们目前编写的程序不支持来自用户的输入。它们每次执行相同的动作。\n",
    "\n",
    "Python提供内建的函数`input`，暂停程序并等待用户输入。当用户按下*Return*或*Enter*，程序会继续，`input`函数会将用户的输入作为字符串进行返回。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "f6a2e4d6",
   "metadata": {},
   "outputs": [],
   "source": [
    "text = input()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acf9ec53",
   "metadata": {},
   "source": [
    "在从用户获取输入之前，你可能想要显示一个提示词，告诉用户输入什么。`input`可以接受一个提示词作为参数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "964346f0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'abc'"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "name = input('你的名字是?\\n')\n",
    "name"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1b754b39",
   "metadata": {},
   "source": [
    "提示词末尾的`\\n`代表一个换行符**newline**，是导致换行的特殊字符，这会导致用户的输入在提示词的下方。\n",
    "\n",
    "译注：在Python默认解释器中可以正常显示input函数的换行符；在Jupyter notebook中，可能无法正常显示。\n",
    "\n",
    "如果你想要用户输入整数，你可以使用`int`函数将返回的值转化为int类型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "60a484d7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'三百四十'"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prompt = '声音在空气中的速度是多少m/s?\\n'\n",
    "speed = input(prompt)\n",
    "speed"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a65f2af",
   "metadata": {},
   "source": [
    "注意如果输入的内容无法被转化为整数，你会遇到运行时错误。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "8d3d6049",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Exception reporting mode: Minimal\n"
     ]
    }
   ],
   "source": [
    "%xmode Minimal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "a04e3016",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "invalid literal for int() with base 10: '三百四十'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31mValueError\u001b[0m\u001b[0;31m:\u001b[0m invalid literal for int() with base 10: '三百四十'\n"
     ]
    }
   ],
   "source": [
    "%%expect ValueError\n",
    "\n",
    "int(speed)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4ce3ed5",
   "metadata": {},
   "source": [
    "稍后我们会看到如何处理这种错误。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14c1d3dc",
   "metadata": {},
   "source": [
    "## 调试\n",
    "\n",
    "如果出现了语法错误或者运行时错误，错误信息将包含许多信息，但也可能太多了。最有用的部分通常是：\n",
    "\n",
    "- 它是哪种错误\n",
    "- 它出现的位置\n",
    "\n",
    "语法错误通常更容易找到，但也有一些陷阱。与空格和制表符相关的错误可能比较棘手，因为它们是隐形的，我们通常会无视。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "b82642f6",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "ename": "IndentationError",
     "evalue": "unexpected indent (2365500740.py, line 2)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  Cell \u001b[0;32mIn[54], line 2\u001b[0;36m\u001b[0m\n\u001b[0;31m    y = 6\u001b[0m\n\u001b[0m    ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m unexpected indent\n"
     ]
    }
   ],
   "source": [
    "%%expect IndentationError\n",
    "x = 5\n",
    " y = 6"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d1d06263",
   "metadata": {},
   "source": [
    "在这个例子里，问题在于第二行以一个空格缩进。但错误信息指向`y`，导致了误解。错误信息会指出发现问题的位置，但实际出错的位置可能在前面一段代码中。\n",
    "\n",
    "这个问题对运行时错误也会出现。例如，假设你想将比率转化为分贝："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "583ef53c",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Exception reporting mode: Context\n"
     ]
    }
   ],
   "source": [
    "%xmode Context"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "2f4b6082",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "math domain error",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[56], line 5\u001b[0m\n\u001b[1;32m      3\u001b[0m denominator \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m10\u001b[39m\n\u001b[1;32m      4\u001b[0m ratio \u001b[38;5;241m=\u001b[39m numerator \u001b[38;5;241m/\u001b[39m\u001b[38;5;241m/\u001b[39m denominator\n\u001b[0;32m----> 5\u001b[0m decibels \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m10\u001b[39m \u001b[38;5;241m*\u001b[39m math\u001b[38;5;241m.\u001b[39mlog10(ratio)\n",
      "\u001b[0;31mValueError\u001b[0m: math domain error"
     ]
    }
   ],
   "source": [
    "%%expect ValueError\n",
    "import math\n",
    "numerator = 9\n",
    "denominator = 10\n",
    "ratio = numerator // denominator\n",
    "decibels = 10 * math.log10(ratio)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55914374",
   "metadata": {},
   "source": [
    "错误信息指出问题在第5行，但这一行没有错误。实际错误出现在第4行，使用整数除法而非浮点数除法，导致`ratio`的值为0。当调用`math.log10`时，将产生`ValueError`，告诉我们`math domain error`，因为0不在`math.log10`的定义域中，0的对数未定义。\n",
    "\n",
    "总体而言，你需要花时间仔细阅读错误信息，但别认为所有的信息都完全正确。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ffe690e",
   "metadata": {},
   "source": [
    "## 术语表\n",
    "- **递归recursion**：调用正在执行的函数自身的过程；\n",
    "- **求模运算符modulus operator**：`%`运算符，在两个整数上进行运算，返回两个数除法的余数；\n",
    "- **布尔表达式boolean expression**：值为`True`或`False`的表达式；\n",
    "- **关系运算符relational operator**：比较两个运算对象的运算符，包括`==`, `!=`, `>`, `<`, `>=`,和`<=`；\n",
    "- **逻辑运算符logical operator**：结合布尔表达式的运算符，包括`and`, `or`,和`not`；\n",
    "- **条件语句conditional statement**：根据某些条件来控制程序执行流程的语句；\n",
    "- **条件condition**：条件语句中的布尔表达式，决定执行哪个分支；\n",
    "The boolean expression in a conditional statement that determines which branch runs.\n",
    "- **块block**：缩进一致的若干语句，表明它们是其他语句的一部分；\n",
    "- **分支branch**：条件语句中可能执行的若干语句块之一；\n",
    "- **链式条件语句chained conditional**：有一系列分支的条件语句；\n",
    "- **嵌套条件语句nested conditional**：出现在另一个条件语句的分支中的条件语句；\n",
    "- **递归的recursive**：调用自身的函数是递归的；\n",
    "- **基准条件base case**：递归函数中不进行递归调用的条件分支；\n",
    "- **无限递归infinite recursion**：不包含基准条件，或者永远无法到达基准条件的递归。无限递归将导致运行时错误；\n",
    "- **换行符newline**：在两部分字符串之间进行换行的字符。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d783953",
   "metadata": {},
   "source": [
    "## 练习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "66aae3cb",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Exception reporting mode: Verbose\n"
     ]
    }
   ],
   "source": [
    "# 这个单元格让Jupyter在出现运行时故障时提供更多调试信息。\n",
    "# 在进行练习前先运行本单元格。\n",
    "\n",
    "%xmode Verbose"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "02f9f1d7",
   "metadata": {},
   "source": [
    "### 询问虚拟助手\n",
    "\n",
    "- 询问虚拟助手：“求模运算符的用途有哪些？”\n",
    "- Python提供`and`, `or`,和`not`运算符以计算逻辑运算，但没有提供计算异或的运算符(exclusive or,xor)。询问虚拟助手：“xor逻辑运算符是什么？如何在Python中计算它？”\n",
    "\n",
    "本章我们看到了对于3个分支的两种`if`语句写法，即链式条件语句和嵌套条件语句。使用虚拟助手将其中一种转化为另一种。例如，询问虚拟助手：“将以下语句转化为链式条件语句”。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "ade1ecb4",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "x = 5\n",
    "y = 7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "dc7026c2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x小于y\n"
     ]
    }
   ],
   "source": [
    "if x == y:\n",
    "    print('x等于y')\n",
    "else:\n",
    "    if x < y:\n",
    "        print('x小于y')\n",
    "    else:\n",
    "        print('x大于y')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c2a8466",
   "metadata": {},
   "source": [
    "询问虚拟助手：“将以下语句转化为单个条件语句。”"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "1fd919ea",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x是正的个位数。\n"
     ]
    }
   ],
   "source": [
    "if 0 < x:\n",
    "    if x < 10:\n",
    "        print('x是正的个位数。')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0fbed08",
   "metadata": {},
   "source": [
    "看看虚拟助手能否简化以下不必要的语法："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "1e71702e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x是正的个位数。\n"
     ]
    }
   ],
   "source": [
    "if not x <= 0 and not x >= 10:\n",
    "    print('x是正的个位数。')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74ef776d",
   "metadata": {},
   "source": [
    "以下是隔两个数字进行倒数的递归函数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "84cbd5a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "def countdown_by_two(n):\n",
    "    if n == 0:\n",
    "        print('发射!')\n",
    "    else:\n",
    "        print(n)\n",
    "        countdown_by_two(n-2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77178e79",
   "metadata": {},
   "source": [
    "看上去它能够正常工作："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "b0918789",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6\n",
      "4\n",
      "2\n",
      "发射!\n"
     ]
    }
   ],
   "source": [
    "countdown_by_two(6)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c9d3a8dc",
   "metadata": {},
   "source": [
    "但这个函数存在错误。询问虚拟助手错误在哪，如何修复。将解答粘贴到这里，并进行测试。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "240a3888",
   "metadata": {},
   "source": [
    "### 练习\n",
    "\n",
    "`time`模块提供了函数`time`，返回从“Unix纪元”(1970年1月1日00:00:00 UTC)至今的秒数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "1e7a2c07",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1736950375.9903634"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from time import time\n",
    "\n",
    "now = time()\n",
    "now"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "054c3197",
   "metadata": {},
   "source": [
    "使用整数除法和求模运算符计算从Unix纪元至今的天数，以及现在时间的小时数，分钟数，秒数。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "310196ba",
   "metadata": {
    "tags": []
   },
   "source": [
    "你可以在官方文档<https://docs.python.org/3/library/time.html>找到更多关于`time`模块的内容。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b1fd514",
   "metadata": {},
   "source": [
    "### 练习\n",
    "\n",
    "给定3个木棍，可能无法组成三角形。例如，如果一个木棍长度为12英寸，其他两个木棍长度为1英寸，你无法让两个短木棍进行闭合。对于任意3个长度，任意一个边长大于其余边长之和，将无法形成三角形。\n",
    "\n",
    "编写函数`is_triangle`，接受3个整数，如果能够形成三角形则打印`Yes`，否则打印`No`。提示：使用链式条件语句。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c2efbe49",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在这编写"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2842401c",
   "metadata": {
    "tags": []
   },
   "source": [
    "使用以下例子进行测试："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "156273af",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "is_triangle(4, 5, 6)   # Yes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "e00793f4",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "is_triangle(1, 2, 3)   # Yes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "d2911c71",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "is_triangle(6, 2, 3)   # No"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "2b05586e",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "is_triangle(1, 1, 12)   # No"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2ba42106",
   "metadata": {},
   "source": [
    "### 练习\n",
    "\n",
    "先不运行以下程序，猜测程序的输出是什么？手工绘制打印结果时的栈图。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dac374ad",
   "metadata": {},
   "outputs": [],
   "source": [
    "def recurse(n, s):\n",
    "    if n == 0:\n",
    "        print(s)\n",
    "    else:\n",
    "        recurse(n-1, n+s)\n",
    "\n",
    "recurse(3, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bca9517d",
   "metadata": {},
   "source": [
    "### 练习\n",
    "\n",
    "以下练习将使用第4章介绍的`jupyturtle`。\n",
    "\n",
    "阅读以下函数，看看你能否明白它的功能。然后运行，检查你的猜测是否正确。\n",
    "\n",
    "调整`length`, `angle`和`factor`，看看它们如何影响结果。如果你不确定是否理解了函数的功能，询问虚拟助手。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "2b0d60a1",
   "metadata": {},
   "outputs": [],
   "source": [
    "from jupyturtle import forward, left, right, back, make_turtle\n",
    "\n",
    "def draw(length):\n",
    "    angle = 50\n",
    "    factor = 0.6\n",
    "    \n",
    "    if length > 5:\n",
    "        forward(length)\n",
    "        left(angle)\n",
    "        draw(factor * length)\n",
    "        right(2 * angle)\n",
    "        draw(factor * length)\n",
    "        left(angle)\n",
    "        back(length)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "197ae156",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在这尝试"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e525ba59",
   "metadata": {},
   "source": [
    "### 练习\n",
    "\n",
    "询问虚拟助手“科赫曲线Koch curve是什么？”\n",
    "\n",
    "要绘制长度为`x`的科赫曲线，需要：\n",
    "\n",
    "1. 绘制长度为`x/3`的科赫曲线；\n",
    "2. 向左转60度；\n",
    "3. 绘制长度为`x/3`的科赫曲线；\n",
    "4. 向右转120度；\n",
    "5. 绘制长度为`x/3`的科赫曲线；\n",
    "6. 向左旋转60度；\n",
    "7. 绘制长度为`x/3`的科赫曲线；\n",
    "\n",
    "当`x`小于5时，直接绘制长度为`x`的线段。\n",
    "\n",
    "编写函数`koch`，接受参数`x`，绘制给定长度的科赫曲线。\n",
    "\n",
    "译注：此处科赫曲线的“长度”是指构造科赫曲线的线段长度。对于没有基准条件无限递归的理论科赫曲线，其长度为无穷大。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c1acc853",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在这定义"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2991143a",
   "metadata": {},
   "source": [
    "结果应该类似："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "55507716",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<svg width=\"300\" height=\"150\">\n",
       "    <rect width=\"100%\" height=\"100%\" fill=\"#F3F3F7\" />\n",
       "\n",
       "<line x1=\"150\" y1=\"75\" x2=\"154.4\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"75.0\" x2=\"156.7\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.7\" y1=\"71.2\" x2=\"158.9\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.9\" y1=\"75.0\" x2=\"163.3\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"75.0\" x2=\"165.6\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"71.2\" x2=\"163.3\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"67.3\" x2=\"167.8\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"167.8\" y1=\"67.3\" x2=\"170.0\" y2=\"63.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.0\" y1=\"63.5\" x2=\"172.2\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.2\" y1=\"67.3\" x2=\"176.7\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"176.7\" y1=\"67.3\" x2=\"174.4\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"174.4\" y1=\"71.2\" x2=\"176.7\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"176.7\" y1=\"75.0\" x2=\"181.1\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"181.1\" y1=\"75.0\" x2=\"183.3\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"183.3\" y1=\"71.2\" x2=\"185.6\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.6\" y1=\"75.0\" x2=\"190.0\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"75.0\" x2=\"192.2\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"71.2\" x2=\"190.0\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"67.3\" x2=\"194.4\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"67.3\" x2=\"196.7\" y2=\"63.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.7\" y1=\"63.5\" x2=\"194.4\" y2=\"59.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"59.6\" x2=\"190.0\" y2=\"59.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"59.6\" x2=\"192.2\" y2=\"55.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"55.8\" x2=\"190.0\" y2=\"51.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"51.9\" x2=\"194.4\" y2=\"51.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"51.9\" x2=\"196.7\" y2=\"48.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.7\" y1=\"48.1\" x2=\"198.9\" y2=\"51.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.9\" y1=\"51.9\" x2=\"203.3\" y2=\"51.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.3\" y1=\"51.9\" x2=\"205.6\" y2=\"48.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.6\" y1=\"48.1\" x2=\"203.3\" y2=\"44.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.3\" y1=\"44.2\" x2=\"207.8\" y2=\"44.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"44.2\" x2=\"210.0\" y2=\"40.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.0\" y1=\"40.4\" x2=\"212.2\" y2=\"44.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.2\" y1=\"44.2\" x2=\"216.7\" y2=\"44.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"216.7\" y1=\"44.2\" x2=\"214.4\" y2=\"48.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.4\" y1=\"48.1\" x2=\"216.7\" y2=\"51.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"216.7\" y1=\"51.9\" x2=\"221.1\" y2=\"51.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.1\" y1=\"51.9\" x2=\"223.3\" y2=\"48.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"223.3\" y1=\"48.1\" x2=\"225.6\" y2=\"51.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"51.9\" x2=\"230.0\" y2=\"51.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"51.9\" x2=\"227.8\" y2=\"55.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.8\" y1=\"55.8\" x2=\"230.0\" y2=\"59.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"59.6\" x2=\"225.6\" y2=\"59.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"59.6\" x2=\"223.3\" y2=\"63.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"223.3\" y1=\"63.5\" x2=\"225.6\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"67.3\" x2=\"230.0\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"67.3\" x2=\"227.8\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.8\" y1=\"71.2\" x2=\"230.0\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"75.0\" x2=\"234.4\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"75.0\" x2=\"236.7\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"236.7\" y1=\"71.2\" x2=\"238.9\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"238.9\" y1=\"75.0\" x2=\"243.3\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.3\" y1=\"75.0\" x2=\"245.6\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"245.6\" y1=\"71.2\" x2=\"243.3\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.3\" y1=\"67.3\" x2=\"247.8\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"247.8\" y1=\"67.3\" x2=\"250.0\" y2=\"63.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"250.0\" y1=\"63.5\" x2=\"252.2\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"252.2\" y1=\"67.3\" x2=\"256.7\" y2=\"67.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"67.3\" x2=\"254.4\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"254.4\" y1=\"71.2\" x2=\"256.7\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"75.0\" x2=\"261.1\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"261.1\" y1=\"75.0\" x2=\"263.3\" y2=\"71.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"263.3\" y1=\"71.2\" x2=\"265.6\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"75.0\" x2=\"270.0\" y2=\"75.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "\n",
       "<g transform=\"rotate(-90.0,270.0,75.0) translate(270.0, 75.0)\">\n",
       "    <circle stroke=\"#63A375\" stroke-width=\"2\" fill=\"transparent\" r=\"5.5\" cx=\"0\" cy=\"0\"/>\n",
       "    <polygon points=\"0,12 2,9 -2,9\" style=\"fill:#63A375;stroke:#63A375;stroke-width:2\"/>\n",
       "</g>\n",
       "\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "make_turtle(delay=0)\n",
    "koch(120)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b1c58420",
   "metadata": {
    "tags": []
   },
   "source": [
    "当koch函数能够正确运行，可以用以下命令绘制科赫雪花："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "86d3123b",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<svg width=\"300\" height=\"300\">\n",
       "    <rect width=\"100%\" height=\"100%\" fill=\"#F3F3F7\" />\n",
       "\n",
       "<line x1=\"150\" y1=\"150\" x2=\"154.4\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"150.0\" x2=\"156.7\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.7\" y1=\"146.2\" x2=\"158.9\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.9\" y1=\"150.0\" x2=\"163.3\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"150.0\" x2=\"165.6\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"146.2\" x2=\"163.3\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"142.3\" x2=\"167.8\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"167.8\" y1=\"142.3\" x2=\"170.0\" y2=\"138.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.0\" y1=\"138.5\" x2=\"172.2\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.2\" y1=\"142.3\" x2=\"176.7\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"176.7\" y1=\"142.3\" x2=\"174.4\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"174.4\" y1=\"146.2\" x2=\"176.7\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"176.7\" y1=\"150.0\" x2=\"181.1\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"181.1\" y1=\"150.0\" x2=\"183.3\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"183.3\" y1=\"146.2\" x2=\"185.6\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.6\" y1=\"150.0\" x2=\"190.0\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"150.0\" x2=\"192.2\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"146.2\" x2=\"190.0\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"142.3\" x2=\"194.4\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"142.3\" x2=\"196.7\" y2=\"138.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.7\" y1=\"138.5\" x2=\"194.4\" y2=\"134.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"134.6\" x2=\"190.0\" y2=\"134.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"134.6\" x2=\"192.2\" y2=\"130.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"130.8\" x2=\"190.0\" y2=\"126.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"126.9\" x2=\"194.4\" y2=\"126.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"126.9\" x2=\"196.7\" y2=\"123.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.7\" y1=\"123.1\" x2=\"198.9\" y2=\"126.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.9\" y1=\"126.9\" x2=\"203.3\" y2=\"126.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.3\" y1=\"126.9\" x2=\"205.6\" y2=\"123.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.6\" y1=\"123.1\" x2=\"203.3\" y2=\"119.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.3\" y1=\"119.2\" x2=\"207.8\" y2=\"119.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"119.2\" x2=\"210.0\" y2=\"115.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.0\" y1=\"115.4\" x2=\"212.2\" y2=\"119.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.2\" y1=\"119.2\" x2=\"216.7\" y2=\"119.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"216.7\" y1=\"119.2\" x2=\"214.4\" y2=\"123.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.4\" y1=\"123.1\" x2=\"216.7\" y2=\"126.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"216.7\" y1=\"126.9\" x2=\"221.1\" y2=\"126.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.1\" y1=\"126.9\" x2=\"223.3\" y2=\"123.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"223.3\" y1=\"123.1\" x2=\"225.6\" y2=\"126.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"126.9\" x2=\"230.0\" y2=\"126.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"126.9\" x2=\"227.8\" y2=\"130.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.8\" y1=\"130.8\" x2=\"230.0\" y2=\"134.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"134.6\" x2=\"225.6\" y2=\"134.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"134.6\" x2=\"223.3\" y2=\"138.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"223.3\" y1=\"138.5\" x2=\"225.6\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"142.3\" x2=\"230.0\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"142.3\" x2=\"227.8\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.8\" y1=\"146.2\" x2=\"230.0\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"150.0\" x2=\"234.4\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"150.0\" x2=\"236.7\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"236.7\" y1=\"146.2\" x2=\"238.9\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"238.9\" y1=\"150.0\" x2=\"243.3\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.3\" y1=\"150.0\" x2=\"245.6\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"245.6\" y1=\"146.2\" x2=\"243.3\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.3\" y1=\"142.3\" x2=\"247.8\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"247.8\" y1=\"142.3\" x2=\"250.0\" y2=\"138.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"250.0\" y1=\"138.5\" x2=\"252.2\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"252.2\" y1=\"142.3\" x2=\"256.7\" y2=\"142.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"142.3\" x2=\"254.4\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"254.4\" y1=\"146.2\" x2=\"256.7\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"150.0\" x2=\"261.1\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"261.1\" y1=\"150.0\" x2=\"263.3\" y2=\"146.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"263.3\" y1=\"146.2\" x2=\"265.6\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"150.0\" x2=\"270.0\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"270.0\" y1=\"150.0\" x2=\"267.8\" y2=\"153.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"267.8\" y1=\"153.8\" x2=\"270.0\" y2=\"157.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"270.0\" y1=\"157.7\" x2=\"265.6\" y2=\"157.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"157.7\" x2=\"263.3\" y2=\"161.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"263.3\" y1=\"161.5\" x2=\"265.6\" y2=\"165.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"165.4\" x2=\"270.0\" y2=\"165.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"270.0\" y1=\"165.4\" x2=\"267.8\" y2=\"169.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"267.8\" y1=\"169.2\" x2=\"270.0\" y2=\"173.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"270.0\" y1=\"173.1\" x2=\"265.6\" y2=\"173.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"173.1\" x2=\"263.3\" y2=\"176.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"263.3\" y1=\"176.9\" x2=\"261.1\" y2=\"173.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"261.1\" y1=\"173.1\" x2=\"256.7\" y2=\"173.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"173.1\" x2=\"254.4\" y2=\"176.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"254.4\" y1=\"176.9\" x2=\"256.7\" y2=\"180.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"180.8\" x2=\"252.2\" y2=\"180.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"252.2\" y1=\"180.8\" x2=\"250.0\" y2=\"184.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"250.0\" y1=\"184.6\" x2=\"252.2\" y2=\"188.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"252.2\" y1=\"188.5\" x2=\"256.7\" y2=\"188.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"188.5\" x2=\"254.4\" y2=\"192.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"254.4\" y1=\"192.3\" x2=\"256.7\" y2=\"196.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"196.2\" x2=\"261.1\" y2=\"196.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"261.1\" y1=\"196.2\" x2=\"263.3\" y2=\"192.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"263.3\" y1=\"192.3\" x2=\"265.6\" y2=\"196.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"196.2\" x2=\"270.0\" y2=\"196.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"270.0\" y1=\"196.2\" x2=\"267.8\" y2=\"200.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"267.8\" y1=\"200.0\" x2=\"270.0\" y2=\"203.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"270.0\" y1=\"203.9\" x2=\"265.6\" y2=\"203.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"203.9\" x2=\"263.3\" y2=\"207.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"263.3\" y1=\"207.7\" x2=\"265.6\" y2=\"211.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"211.6\" x2=\"270.0\" y2=\"211.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"270.0\" y1=\"211.6\" x2=\"267.8\" y2=\"215.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"267.8\" y1=\"215.4\" x2=\"270.0\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"270.0\" y1=\"219.3\" x2=\"265.6\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"265.6\" y1=\"219.3\" x2=\"263.3\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"263.3\" y1=\"223.1\" x2=\"261.1\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"261.1\" y1=\"219.3\" x2=\"256.7\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"219.3\" x2=\"254.4\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"254.4\" y1=\"223.1\" x2=\"256.7\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"256.7\" y1=\"227.0\" x2=\"252.2\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"252.2\" y1=\"227.0\" x2=\"250.0\" y2=\"230.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"250.0\" y1=\"230.8\" x2=\"247.8\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"247.8\" y1=\"227.0\" x2=\"243.3\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.3\" y1=\"227.0\" x2=\"245.6\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"245.6\" y1=\"223.1\" x2=\"243.3\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.3\" y1=\"219.3\" x2=\"238.9\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"238.9\" y1=\"219.3\" x2=\"236.7\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"236.7\" y1=\"223.1\" x2=\"234.4\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"219.3\" x2=\"230.0\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"219.3\" x2=\"227.8\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.8\" y1=\"223.1\" x2=\"230.0\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"227.0\" x2=\"225.6\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"227.0\" x2=\"223.3\" y2=\"230.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"223.3\" y1=\"230.8\" x2=\"225.6\" y2=\"234.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"234.7\" x2=\"230.0\" y2=\"234.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"234.7\" x2=\"227.8\" y2=\"238.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.8\" y1=\"238.5\" x2=\"230.0\" y2=\"242.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"230.0\" y1=\"242.4\" x2=\"225.6\" y2=\"242.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.6\" y1=\"242.4\" x2=\"223.3\" y2=\"246.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"223.3\" y1=\"246.2\" x2=\"221.1\" y2=\"242.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.1\" y1=\"242.4\" x2=\"216.7\" y2=\"242.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"216.7\" y1=\"242.4\" x2=\"214.4\" y2=\"246.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.4\" y1=\"246.2\" x2=\"216.7\" y2=\"250.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"216.7\" y1=\"250.1\" x2=\"212.2\" y2=\"250.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.2\" y1=\"250.1\" x2=\"210.0\" y2=\"253.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.0\" y1=\"253.9\" x2=\"207.8\" y2=\"250.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"250.1\" x2=\"203.3\" y2=\"250.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.3\" y1=\"250.1\" x2=\"205.6\" y2=\"246.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.6\" y1=\"246.2\" x2=\"203.3\" y2=\"242.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.3\" y1=\"242.4\" x2=\"198.9\" y2=\"242.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.9\" y1=\"242.4\" x2=\"196.7\" y2=\"246.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.7\" y1=\"246.2\" x2=\"194.4\" y2=\"242.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"242.4\" x2=\"190.0\" y2=\"242.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"242.4\" x2=\"192.2\" y2=\"238.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"238.5\" x2=\"190.0\" y2=\"234.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"234.7\" x2=\"194.4\" y2=\"234.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"234.7\" x2=\"196.7\" y2=\"230.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.7\" y1=\"230.8\" x2=\"194.4\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.4\" y1=\"227.0\" x2=\"190.0\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"227.0\" x2=\"192.2\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"223.1\" x2=\"190.0\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"190.0\" y1=\"219.3\" x2=\"185.6\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.6\" y1=\"219.3\" x2=\"183.3\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"183.3\" y1=\"223.1\" x2=\"181.1\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"181.1\" y1=\"219.3\" x2=\"176.7\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"176.7\" y1=\"219.3\" x2=\"174.4\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"174.4\" y1=\"223.1\" x2=\"176.7\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"176.7\" y1=\"227.0\" x2=\"172.2\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.2\" y1=\"227.0\" x2=\"170.0\" y2=\"230.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.0\" y1=\"230.8\" x2=\"167.8\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"167.8\" y1=\"227.0\" x2=\"163.3\" y2=\"227.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"227.0\" x2=\"165.6\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"223.1\" x2=\"163.3\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"219.3\" x2=\"158.9\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.9\" y1=\"219.3\" x2=\"156.7\" y2=\"223.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.7\" y1=\"223.1\" x2=\"154.4\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"219.3\" x2=\"150.0\" y2=\"219.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"150.0\" y1=\"219.3\" x2=\"152.2\" y2=\"215.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"152.2\" y1=\"215.4\" x2=\"150.0\" y2=\"211.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"150.0\" y1=\"211.6\" x2=\"154.4\" y2=\"211.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"211.6\" x2=\"156.7\" y2=\"207.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.7\" y1=\"207.7\" x2=\"154.4\" y2=\"203.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"203.9\" x2=\"150.0\" y2=\"203.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"150.0\" y1=\"203.9\" x2=\"152.2\" y2=\"200.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"152.2\" y1=\"200.0\" x2=\"150.0\" y2=\"196.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"150.0\" y1=\"196.2\" x2=\"154.4\" y2=\"196.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"196.2\" x2=\"156.7\" y2=\"192.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.7\" y1=\"192.3\" x2=\"158.9\" y2=\"196.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.9\" y1=\"196.2\" x2=\"163.3\" y2=\"196.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"196.2\" x2=\"165.6\" y2=\"192.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"192.3\" x2=\"163.3\" y2=\"188.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"188.5\" x2=\"167.8\" y2=\"188.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"167.8\" y1=\"188.5\" x2=\"170.0\" y2=\"184.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.0\" y1=\"184.6\" x2=\"167.8\" y2=\"180.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"167.8\" y1=\"180.8\" x2=\"163.3\" y2=\"180.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"180.8\" x2=\"165.6\" y2=\"176.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"176.9\" x2=\"163.3\" y2=\"173.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"173.1\" x2=\"158.9\" y2=\"173.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.9\" y1=\"173.1\" x2=\"156.7\" y2=\"176.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.7\" y1=\"176.9\" x2=\"154.4\" y2=\"173.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"173.1\" x2=\"150.0\" y2=\"173.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"150.0\" y1=\"173.1\" x2=\"152.2\" y2=\"169.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"152.2\" y1=\"169.2\" x2=\"150.0\" y2=\"165.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"150.0\" y1=\"165.4\" x2=\"154.4\" y2=\"165.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"165.4\" x2=\"156.7\" y2=\"161.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.7\" y1=\"161.5\" x2=\"154.4\" y2=\"157.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.4\" y1=\"157.7\" x2=\"150.0\" y2=\"157.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"150.0\" y1=\"157.7\" x2=\"152.2\" y2=\"153.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"152.2\" y1=\"153.8\" x2=\"150.0\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "\n",
       "<g transform=\"rotate(-90.0,150.0,150.0) translate(150.0, 150.0)\">\n",
       "    <circle stroke=\"#63A375\" stroke-width=\"2\" fill=\"transparent\" r=\"5.5\" cx=\"0\" cy=\"0\"/>\n",
       "    <polygon points=\"0,12 2,9 -2,9\" style=\"fill:#63A375;stroke:#63A375;stroke-width:2\"/>\n",
       "</g>\n",
       "\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "make_turtle(delay=0, height=300)\n",
    "for i in range(3):\n",
    "    koch(120)\n",
    "    right(120)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c964239",
   "metadata": {},
   "source": [
    "### 练习\n",
    "\n",
    "虚拟助手知道`jupyturtle`模块中的函数，但这些函数有很多版本和不同的名字。所以虚拟助手可能不清楚你的版本。\n",
    "\n",
    "你可以在提问之前提供额外的信息。例如，你可以用以下提示词：“以下是使用`jupyturtle`模块的一个程序。”将前面相关练习的程序粘贴给虚拟助手。然后虚拟助手应该能够使用这个模块来编写代码。\n",
    "\n",
    "例如让虚拟助手绘制Sierpiński谢尔宾斯基三角形。你得到的代码可能是良好的开始，但你可能也必须做一些调试。\n",
    "\n",
    "如果首次尝试失败，你可以告诉虚拟助手发生了什么并寻求帮助，或者自行调试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "68439acf",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在这定义"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19afd61e",
   "metadata": {},
   "source": [
    "译注:L型曲线逼近方法参考代码如下:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "db741844",
   "metadata": {},
   "outputs": [],
   "source": [
    "def draw_sierpinski(length,thred,sign=1):\n",
    "    if length<=thred:\n",
    "        forward(length)\n",
    "    else:\n",
    "        length=length/4\n",
    "        draw_sierpinski(length,thred,sign)\n",
    "        left(sign*60)\n",
    "        draw_sierpinski(length,thred,-sign)\n",
    "        left(sign*60)\n",
    "        draw_sierpinski(length,thred,sign)\n",
    "        right(sign*60)\n",
    "        draw_sierpinski(length,thred,-sign)\n",
    "        right(sign*60)\n",
    "        draw_sierpinski(length,thred,sign)\n",
    "        right(sign*60)\n",
    "        draw_sierpinski(length,thred,-sign)\n",
    "        right(sign*60)\n",
    "        draw_sierpinski(length,thred,sign)\n",
    "        left(sign*60)\n",
    "        draw_sierpinski(length,thred,-sign)\n",
    "        left(sign*60)\n",
    "        draw_sierpinski(length,thred,sign)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a95097a",
   "metadata": {},
   "source": [
    "以下是一个例子，尽管你看到的形式可能不同。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "43470b3d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<svg width=\"300\" height=\"300\">\n",
       "    <rect width=\"100%\" height=\"100%\" fill=\"#F3F3F7\" />\n",
       "\n",
       "<line x1=\"150\" y1=\"150\" x2=\"151.6\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"151.6\" y1=\"150.0\" x2=\"152.3\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"152.3\" y1=\"148.6\" x2=\"151.6\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"151.6\" y1=\"147.3\" x2=\"152.3\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"152.3\" y1=\"145.9\" x2=\"153.9\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"153.9\" y1=\"145.9\" x2=\"154.7\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.7\" y1=\"147.3\" x2=\"153.9\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"153.9\" y1=\"148.6\" x2=\"154.7\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.7\" y1=\"150.0\" x2=\"156.2\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.2\" y1=\"150.0\" x2=\"157.0\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"157.0\" y1=\"148.6\" x2=\"158.6\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.6\" y1=\"148.6\" x2=\"159.4\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"159.4\" y1=\"150.0\" x2=\"160.9\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"160.9\" y1=\"150.0\" x2=\"161.7\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"161.7\" y1=\"148.6\" x2=\"160.9\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"160.9\" y1=\"147.3\" x2=\"159.4\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"159.4\" y1=\"147.3\" x2=\"158.6\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.6\" y1=\"145.9\" x2=\"159.4\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"159.4\" y1=\"144.6\" x2=\"158.6\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.6\" y1=\"143.2\" x2=\"157.0\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"157.0\" y1=\"143.2\" x2=\"156.2\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.2\" y1=\"144.6\" x2=\"154.7\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.7\" y1=\"144.6\" x2=\"153.9\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"153.9\" y1=\"143.2\" x2=\"154.7\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"154.7\" y1=\"141.9\" x2=\"156.2\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.2\" y1=\"141.9\" x2=\"157.0\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"157.0\" y1=\"140.5\" x2=\"156.2\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"156.2\" y1=\"139.2\" x2=\"157.0\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"157.0\" y1=\"137.8\" x2=\"158.6\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.6\" y1=\"137.8\" x2=\"159.4\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"159.4\" y1=\"139.2\" x2=\"160.9\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"160.9\" y1=\"139.2\" x2=\"161.7\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"161.7\" y1=\"137.8\" x2=\"160.9\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"160.9\" y1=\"136.5\" x2=\"159.4\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"159.4\" y1=\"136.5\" x2=\"158.6\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"158.6\" y1=\"135.1\" x2=\"159.4\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"159.4\" y1=\"133.8\" x2=\"160.9\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"160.9\" y1=\"133.8\" x2=\"161.7\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"161.7\" y1=\"132.4\" x2=\"160.9\" y2=\"131.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"160.9\" y1=\"131.1\" x2=\"161.7\" y2=\"129.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"161.7\" y1=\"129.7\" x2=\"163.3\" y2=\"129.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"129.7\" x2=\"164.1\" y2=\"131.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"164.1\" y1=\"131.1\" x2=\"163.3\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"132.4\" x2=\"164.1\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"164.1\" y1=\"133.8\" x2=\"165.6\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"133.8\" x2=\"166.4\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"166.4\" y1=\"135.1\" x2=\"165.6\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"136.5\" x2=\"164.1\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"164.1\" y1=\"136.5\" x2=\"163.3\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"137.8\" x2=\"164.1\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"164.1\" y1=\"139.2\" x2=\"165.6\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"139.2\" x2=\"166.4\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"166.4\" y1=\"137.8\" x2=\"168.0\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.0\" y1=\"137.8\" x2=\"168.8\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.8\" y1=\"139.2\" x2=\"168.0\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.0\" y1=\"140.5\" x2=\"168.8\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.8\" y1=\"141.9\" x2=\"170.3\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"141.9\" x2=\"171.1\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"171.1\" y1=\"143.2\" x2=\"170.3\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"144.6\" x2=\"168.8\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.8\" y1=\"144.6\" x2=\"168.0\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.0\" y1=\"143.2\" x2=\"166.4\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"166.4\" y1=\"143.2\" x2=\"165.6\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"144.6\" x2=\"166.4\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"166.4\" y1=\"145.9\" x2=\"165.6\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"147.3\" x2=\"164.1\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"164.1\" y1=\"147.3\" x2=\"163.3\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"148.6\" x2=\"164.1\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"164.1\" y1=\"150.0\" x2=\"165.6\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"150.0\" x2=\"166.4\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"166.4\" y1=\"148.6\" x2=\"168.0\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.0\" y1=\"148.6\" x2=\"168.8\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.8\" y1=\"150.0\" x2=\"170.3\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"150.0\" x2=\"171.1\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"171.1\" y1=\"148.6\" x2=\"170.3\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"147.3\" x2=\"171.1\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"171.1\" y1=\"145.9\" x2=\"172.7\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.7\" y1=\"145.9\" x2=\"173.4\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"173.4\" y1=\"147.3\" x2=\"172.7\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.7\" y1=\"148.6\" x2=\"173.4\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"173.4\" y1=\"150.0\" x2=\"175.0\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.0\" y1=\"150.0\" x2=\"175.8\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.8\" y1=\"148.6\" x2=\"177.3\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"148.6\" x2=\"178.1\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"150.0\" x2=\"179.7\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"150.0\" x2=\"180.5\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"148.6\" x2=\"179.7\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"147.3\" x2=\"178.1\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"147.3\" x2=\"177.3\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"145.9\" x2=\"178.1\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"144.6\" x2=\"179.7\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"144.6\" x2=\"180.5\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"143.2\" x2=\"179.7\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"141.9\" x2=\"180.5\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"140.5\" x2=\"182.0\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"140.5\" x2=\"182.8\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"141.9\" x2=\"182.0\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"143.2\" x2=\"182.8\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"144.6\" x2=\"184.4\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"144.6\" x2=\"185.2\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"145.9\" x2=\"184.4\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"147.3\" x2=\"182.8\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"147.3\" x2=\"182.0\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"148.6\" x2=\"182.8\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"150.0\" x2=\"184.4\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"150.0\" x2=\"185.2\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"148.6\" x2=\"186.7\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"148.6\" x2=\"187.5\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"150.0\" x2=\"189.1\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"150.0\" x2=\"189.8\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"148.6\" x2=\"189.1\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"147.3\" x2=\"189.8\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"145.9\" x2=\"191.4\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"145.9\" x2=\"192.2\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"147.3\" x2=\"191.4\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"148.6\" x2=\"192.2\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"150.0\" x2=\"193.8\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"150.0\" x2=\"194.5\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"148.6\" x2=\"196.1\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"148.6\" x2=\"196.9\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"150.0\" x2=\"198.4\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"150.0\" x2=\"199.2\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"199.2\" y1=\"148.6\" x2=\"198.4\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"147.3\" x2=\"196.9\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"147.3\" x2=\"196.1\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"145.9\" x2=\"196.9\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"144.6\" x2=\"196.1\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"143.2\" x2=\"194.5\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"143.2\" x2=\"193.8\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"144.6\" x2=\"192.2\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"144.6\" x2=\"191.4\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"143.2\" x2=\"192.2\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"141.9\" x2=\"193.8\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"141.9\" x2=\"194.5\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"140.5\" x2=\"193.8\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"139.2\" x2=\"192.2\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"139.2\" x2=\"191.4\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"137.8\" x2=\"192.2\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"136.5\" x2=\"191.4\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"135.1\" x2=\"189.8\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"135.1\" x2=\"189.1\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"136.5\" x2=\"189.8\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"137.8\" x2=\"189.1\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"139.2\" x2=\"187.5\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"139.2\" x2=\"186.7\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"137.8\" x2=\"185.2\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"137.8\" x2=\"184.4\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"139.2\" x2=\"182.8\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"139.2\" x2=\"182.0\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"137.8\" x2=\"182.8\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"136.5\" x2=\"184.4\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"136.5\" x2=\"185.2\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"135.1\" x2=\"184.4\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"133.8\" x2=\"185.2\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"132.4\" x2=\"186.7\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"132.4\" x2=\"187.5\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"133.8\" x2=\"189.1\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"133.8\" x2=\"189.8\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"132.4\" x2=\"189.1\" y2=\"131.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"131.1\" x2=\"187.5\" y2=\"131.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"131.1\" x2=\"186.7\" y2=\"129.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"129.7\" x2=\"187.5\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"128.3\" x2=\"186.7\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"127.0\" x2=\"185.2\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"127.0\" x2=\"184.4\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"128.3\" x2=\"182.8\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"128.3\" x2=\"182.0\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"127.0\" x2=\"182.8\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"125.6\" x2=\"184.4\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"125.6\" x2=\"185.2\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"124.3\" x2=\"184.4\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"122.9\" x2=\"182.8\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"122.9\" x2=\"182.0\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"121.6\" x2=\"182.8\" y2=\"120.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"120.2\" x2=\"182.0\" y2=\"118.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"118.9\" x2=\"180.5\" y2=\"118.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"118.9\" x2=\"179.7\" y2=\"120.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"120.2\" x2=\"180.5\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"121.6\" x2=\"179.7\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"122.9\" x2=\"178.1\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"122.9\" x2=\"177.3\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"124.3\" x2=\"178.1\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"125.6\" x2=\"179.7\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"125.6\" x2=\"180.5\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"127.0\" x2=\"179.7\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"128.3\" x2=\"178.1\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"128.3\" x2=\"177.3\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"127.0\" x2=\"175.8\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.8\" y1=\"127.0\" x2=\"175.0\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.0\" y1=\"128.3\" x2=\"173.4\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"173.4\" y1=\"128.3\" x2=\"172.7\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.7\" y1=\"127.0\" x2=\"173.4\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"173.4\" y1=\"125.6\" x2=\"172.7\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.7\" y1=\"124.3\" x2=\"171.1\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"171.1\" y1=\"124.3\" x2=\"170.3\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"125.6\" x2=\"171.1\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"171.1\" y1=\"127.0\" x2=\"170.3\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"128.3\" x2=\"168.8\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.8\" y1=\"128.3\" x2=\"168.0\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.0\" y1=\"127.0\" x2=\"166.4\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"166.4\" y1=\"127.0\" x2=\"165.6\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"128.3\" x2=\"164.1\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"164.1\" y1=\"128.3\" x2=\"163.3\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"163.3\" y1=\"127.0\" x2=\"164.1\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"164.1\" y1=\"125.6\" x2=\"165.6\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"125.6\" x2=\"166.4\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"166.4\" y1=\"124.3\" x2=\"165.6\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"165.6\" y1=\"122.9\" x2=\"166.4\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"166.4\" y1=\"121.6\" x2=\"168.0\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.0\" y1=\"121.6\" x2=\"168.8\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.8\" y1=\"122.9\" x2=\"170.3\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"122.9\" x2=\"171.1\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"171.1\" y1=\"121.6\" x2=\"170.3\" y2=\"120.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"120.2\" x2=\"168.8\" y2=\"120.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.8\" y1=\"120.2\" x2=\"168.0\" y2=\"118.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.0\" y1=\"118.9\" x2=\"168.8\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"168.8\" y1=\"117.5\" x2=\"170.3\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"117.5\" x2=\"171.1\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"171.1\" y1=\"116.2\" x2=\"170.3\" y2=\"114.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"170.3\" y1=\"114.8\" x2=\"171.1\" y2=\"113.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"171.1\" y1=\"113.5\" x2=\"172.7\" y2=\"113.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.7\" y1=\"113.5\" x2=\"173.4\" y2=\"114.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"173.4\" y1=\"114.8\" x2=\"172.7\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.7\" y1=\"116.2\" x2=\"173.4\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"173.4\" y1=\"117.5\" x2=\"175.0\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.0\" y1=\"117.5\" x2=\"175.8\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.8\" y1=\"116.2\" x2=\"177.3\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"116.2\" x2=\"178.1\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"117.5\" x2=\"179.7\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"117.5\" x2=\"180.5\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"116.2\" x2=\"179.7\" y2=\"114.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"114.8\" x2=\"178.1\" y2=\"114.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"114.8\" x2=\"177.3\" y2=\"113.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"113.5\" x2=\"178.1\" y2=\"112.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"112.1\" x2=\"177.3\" y2=\"110.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"110.8\" x2=\"175.8\" y2=\"110.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.8\" y1=\"110.8\" x2=\"175.0\" y2=\"112.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.0\" y1=\"112.1\" x2=\"173.4\" y2=\"112.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"173.4\" y1=\"112.1\" x2=\"172.7\" y2=\"110.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"172.7\" y1=\"110.8\" x2=\"173.4\" y2=\"109.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"173.4\" y1=\"109.4\" x2=\"175.0\" y2=\"109.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.0\" y1=\"109.4\" x2=\"175.8\" y2=\"108.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.8\" y1=\"108.1\" x2=\"175.0\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.0\" y1=\"106.7\" x2=\"175.8\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"175.8\" y1=\"105.3\" x2=\"177.3\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"105.3\" x2=\"178.1\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"106.7\" x2=\"179.7\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"106.7\" x2=\"180.5\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"105.3\" x2=\"179.7\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"104.0\" x2=\"178.1\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"104.0\" x2=\"177.3\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"177.3\" y1=\"102.6\" x2=\"178.1\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"178.1\" y1=\"101.3\" x2=\"179.7\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"101.3\" x2=\"180.5\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"99.9\" x2=\"179.7\" y2=\"98.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"179.7\" y1=\"98.6\" x2=\"180.5\" y2=\"97.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"180.5\" y1=\"97.2\" x2=\"182.0\" y2=\"97.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"97.2\" x2=\"182.8\" y2=\"98.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"98.6\" x2=\"182.0\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"99.9\" x2=\"182.8\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"101.3\" x2=\"184.4\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"101.3\" x2=\"185.2\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"102.6\" x2=\"184.4\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"104.0\" x2=\"182.8\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"104.0\" x2=\"182.0\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"105.3\" x2=\"182.8\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"106.7\" x2=\"184.4\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"106.7\" x2=\"185.2\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"105.3\" x2=\"186.7\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"105.3\" x2=\"187.5\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"106.7\" x2=\"189.1\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"106.7\" x2=\"189.8\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"105.3\" x2=\"189.1\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"104.0\" x2=\"189.8\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"102.6\" x2=\"191.4\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"102.6\" x2=\"192.2\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"104.0\" x2=\"191.4\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"105.3\" x2=\"192.2\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"106.7\" x2=\"193.8\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"106.7\" x2=\"194.5\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"105.3\" x2=\"196.1\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"105.3\" x2=\"196.9\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"106.7\" x2=\"198.4\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"106.7\" x2=\"199.2\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"199.2\" y1=\"105.3\" x2=\"198.4\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"104.0\" x2=\"196.9\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"104.0\" x2=\"196.1\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"102.6\" x2=\"196.9\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"101.3\" x2=\"196.1\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"99.9\" x2=\"194.5\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"99.9\" x2=\"193.8\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"101.3\" x2=\"192.2\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"101.3\" x2=\"191.4\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"99.9\" x2=\"192.2\" y2=\"98.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"98.6\" x2=\"193.8\" y2=\"98.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"98.6\" x2=\"194.5\" y2=\"97.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"97.2\" x2=\"193.8\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"95.9\" x2=\"192.2\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"95.9\" x2=\"191.4\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"94.5\" x2=\"192.2\" y2=\"93.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"93.2\" x2=\"191.4\" y2=\"91.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"91.8\" x2=\"189.8\" y2=\"91.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"91.8\" x2=\"189.1\" y2=\"93.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"93.2\" x2=\"189.8\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"94.5\" x2=\"189.1\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"95.9\" x2=\"187.5\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"95.9\" x2=\"186.7\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"94.5\" x2=\"185.2\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"94.5\" x2=\"184.4\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"95.9\" x2=\"182.8\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"95.9\" x2=\"182.0\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.0\" y1=\"94.5\" x2=\"182.8\" y2=\"93.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"182.8\" y1=\"93.2\" x2=\"184.4\" y2=\"93.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"93.2\" x2=\"185.2\" y2=\"91.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"91.8\" x2=\"184.4\" y2=\"90.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"184.4\" y1=\"90.5\" x2=\"185.2\" y2=\"89.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"185.2\" y1=\"89.1\" x2=\"186.7\" y2=\"89.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"89.1\" x2=\"187.5\" y2=\"90.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"90.5\" x2=\"189.1\" y2=\"90.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"90.5\" x2=\"189.8\" y2=\"89.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"89.1\" x2=\"189.1\" y2=\"87.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"87.8\" x2=\"187.5\" y2=\"87.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"87.8\" x2=\"186.7\" y2=\"86.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"186.7\" y1=\"86.4\" x2=\"187.5\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"187.5\" y1=\"85.0\" x2=\"189.1\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"85.0\" x2=\"189.8\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"83.7\" x2=\"189.1\" y2=\"82.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.1\" y1=\"82.3\" x2=\"189.8\" y2=\"81.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"189.8\" y1=\"81.0\" x2=\"191.4\" y2=\"81.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"81.0\" x2=\"192.2\" y2=\"82.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"82.3\" x2=\"191.4\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"83.7\" x2=\"192.2\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"85.0\" x2=\"193.8\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"85.0\" x2=\"194.5\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"83.7\" x2=\"196.1\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"83.7\" x2=\"196.9\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"85.0\" x2=\"198.4\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"85.0\" x2=\"199.2\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"199.2\" y1=\"83.7\" x2=\"198.4\" y2=\"82.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"82.3\" x2=\"196.9\" y2=\"82.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"82.3\" x2=\"196.1\" y2=\"81.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"81.0\" x2=\"196.9\" y2=\"79.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"79.6\" x2=\"196.1\" y2=\"78.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"78.3\" x2=\"194.5\" y2=\"78.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"78.3\" x2=\"193.8\" y2=\"79.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"79.6\" x2=\"192.2\" y2=\"79.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"79.6\" x2=\"191.4\" y2=\"78.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"191.4\" y1=\"78.3\" x2=\"192.2\" y2=\"76.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"192.2\" y1=\"76.9\" x2=\"193.8\" y2=\"76.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"76.9\" x2=\"194.5\" y2=\"75.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"75.6\" x2=\"193.8\" y2=\"74.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"193.8\" y1=\"74.2\" x2=\"194.5\" y2=\"72.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"194.5\" y1=\"72.9\" x2=\"196.1\" y2=\"72.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"72.9\" x2=\"196.9\" y2=\"74.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"74.2\" x2=\"198.4\" y2=\"74.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"74.2\" x2=\"199.2\" y2=\"72.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"199.2\" y1=\"72.9\" x2=\"198.4\" y2=\"71.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"71.5\" x2=\"196.9\" y2=\"71.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"71.5\" x2=\"196.1\" y2=\"70.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.1\" y1=\"70.2\" x2=\"196.9\" y2=\"68.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"196.9\" y1=\"68.8\" x2=\"198.4\" y2=\"68.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"68.8\" x2=\"199.2\" y2=\"67.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"199.2\" y1=\"67.5\" x2=\"198.4\" y2=\"66.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"198.4\" y1=\"66.1\" x2=\"199.2\" y2=\"64.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"199.2\" y1=\"64.8\" x2=\"200.8\" y2=\"64.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"200.8\" y1=\"64.8\" x2=\"201.6\" y2=\"66.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"66.1\" x2=\"200.8\" y2=\"67.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"200.8\" y1=\"67.5\" x2=\"201.6\" y2=\"68.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"68.8\" x2=\"203.1\" y2=\"68.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"68.8\" x2=\"203.9\" y2=\"70.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"70.2\" x2=\"203.1\" y2=\"71.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"71.5\" x2=\"201.6\" y2=\"71.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"71.5\" x2=\"200.8\" y2=\"72.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"200.8\" y1=\"72.9\" x2=\"201.6\" y2=\"74.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"74.2\" x2=\"203.1\" y2=\"74.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"74.2\" x2=\"203.9\" y2=\"72.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"72.9\" x2=\"205.5\" y2=\"72.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"72.9\" x2=\"206.2\" y2=\"74.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"74.2\" x2=\"205.5\" y2=\"75.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"75.6\" x2=\"206.2\" y2=\"76.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"76.9\" x2=\"207.8\" y2=\"76.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"76.9\" x2=\"208.6\" y2=\"78.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"78.3\" x2=\"207.8\" y2=\"79.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"79.6\" x2=\"206.2\" y2=\"79.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"79.6\" x2=\"205.5\" y2=\"78.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"78.3\" x2=\"203.9\" y2=\"78.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"78.3\" x2=\"203.1\" y2=\"79.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"79.6\" x2=\"203.9\" y2=\"81.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"81.0\" x2=\"203.1\" y2=\"82.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"82.3\" x2=\"201.6\" y2=\"82.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"82.3\" x2=\"200.8\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"200.8\" y1=\"83.7\" x2=\"201.6\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"85.0\" x2=\"203.1\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"85.0\" x2=\"203.9\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"83.7\" x2=\"205.5\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"83.7\" x2=\"206.2\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"85.0\" x2=\"207.8\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"85.0\" x2=\"208.6\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"83.7\" x2=\"207.8\" y2=\"82.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"82.3\" x2=\"208.6\" y2=\"81.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"81.0\" x2=\"210.2\" y2=\"81.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"81.0\" x2=\"210.9\" y2=\"82.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"82.3\" x2=\"210.2\" y2=\"83.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"83.7\" x2=\"210.9\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"85.0\" x2=\"212.5\" y2=\"85.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"85.0\" x2=\"213.3\" y2=\"86.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"86.4\" x2=\"212.5\" y2=\"87.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"87.8\" x2=\"210.9\" y2=\"87.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"87.8\" x2=\"210.2\" y2=\"89.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"89.1\" x2=\"210.9\" y2=\"90.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"90.5\" x2=\"212.5\" y2=\"90.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"90.5\" x2=\"213.3\" y2=\"89.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"89.1\" x2=\"214.8\" y2=\"89.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"89.1\" x2=\"215.6\" y2=\"90.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"90.5\" x2=\"214.8\" y2=\"91.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"91.8\" x2=\"215.6\" y2=\"93.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"93.2\" x2=\"217.2\" y2=\"93.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"93.2\" x2=\"218.0\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"94.5\" x2=\"217.2\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"95.9\" x2=\"215.6\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"95.9\" x2=\"214.8\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"94.5\" x2=\"213.3\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"94.5\" x2=\"212.5\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"95.9\" x2=\"210.9\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"95.9\" x2=\"210.2\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"94.5\" x2=\"210.9\" y2=\"93.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"93.2\" x2=\"210.2\" y2=\"91.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"91.8\" x2=\"208.6\" y2=\"91.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"91.8\" x2=\"207.8\" y2=\"93.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"93.2\" x2=\"208.6\" y2=\"94.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"94.5\" x2=\"207.8\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"95.9\" x2=\"206.2\" y2=\"95.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"95.9\" x2=\"205.5\" y2=\"97.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"97.2\" x2=\"206.2\" y2=\"98.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"98.6\" x2=\"207.8\" y2=\"98.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"98.6\" x2=\"208.6\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"99.9\" x2=\"207.8\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"101.3\" x2=\"206.2\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"101.3\" x2=\"205.5\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"99.9\" x2=\"203.9\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"99.9\" x2=\"203.1\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"101.3\" x2=\"203.9\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"102.6\" x2=\"203.1\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"104.0\" x2=\"201.6\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"104.0\" x2=\"200.8\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"200.8\" y1=\"105.3\" x2=\"201.6\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"106.7\" x2=\"203.1\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"106.7\" x2=\"203.9\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"105.3\" x2=\"205.5\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"105.3\" x2=\"206.2\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"106.7\" x2=\"207.8\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"106.7\" x2=\"208.6\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"105.3\" x2=\"207.8\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"104.0\" x2=\"208.6\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"102.6\" x2=\"210.2\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"102.6\" x2=\"210.9\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"104.0\" x2=\"210.2\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"105.3\" x2=\"210.9\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"106.7\" x2=\"212.5\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"106.7\" x2=\"213.3\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"105.3\" x2=\"214.8\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"105.3\" x2=\"215.6\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"106.7\" x2=\"217.2\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"106.7\" x2=\"218.0\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"105.3\" x2=\"217.2\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"104.0\" x2=\"215.6\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"104.0\" x2=\"214.8\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"102.6\" x2=\"215.6\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"101.3\" x2=\"217.2\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"101.3\" x2=\"218.0\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"99.9\" x2=\"217.2\" y2=\"98.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"98.6\" x2=\"218.0\" y2=\"97.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"97.2\" x2=\"219.5\" y2=\"97.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"97.2\" x2=\"220.3\" y2=\"98.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"98.6\" x2=\"219.5\" y2=\"99.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"99.9\" x2=\"220.3\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"101.3\" x2=\"221.9\" y2=\"101.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"101.3\" x2=\"222.7\" y2=\"102.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"102.6\" x2=\"221.9\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"104.0\" x2=\"220.3\" y2=\"104.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"104.0\" x2=\"219.5\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"105.3\" x2=\"220.3\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"106.7\" x2=\"221.9\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"106.7\" x2=\"222.7\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"105.3\" x2=\"224.2\" y2=\"105.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"224.2\" y1=\"105.3\" x2=\"225.0\" y2=\"106.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.0\" y1=\"106.7\" x2=\"224.2\" y2=\"108.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"224.2\" y1=\"108.1\" x2=\"225.0\" y2=\"109.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.0\" y1=\"109.4\" x2=\"226.6\" y2=\"109.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"226.6\" y1=\"109.4\" x2=\"227.3\" y2=\"110.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.3\" y1=\"110.8\" x2=\"226.6\" y2=\"112.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"226.6\" y1=\"112.1\" x2=\"225.0\" y2=\"112.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.0\" y1=\"112.1\" x2=\"224.2\" y2=\"110.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"224.2\" y1=\"110.8\" x2=\"222.7\" y2=\"110.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"110.8\" x2=\"221.9\" y2=\"112.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"112.1\" x2=\"222.7\" y2=\"113.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"113.5\" x2=\"221.9\" y2=\"114.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"114.8\" x2=\"220.3\" y2=\"114.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"114.8\" x2=\"219.5\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"116.2\" x2=\"220.3\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"117.5\" x2=\"221.9\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"117.5\" x2=\"222.7\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"116.2\" x2=\"224.2\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"224.2\" y1=\"116.2\" x2=\"225.0\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.0\" y1=\"117.5\" x2=\"226.6\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"226.6\" y1=\"117.5\" x2=\"227.3\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.3\" y1=\"116.2\" x2=\"226.6\" y2=\"114.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"226.6\" y1=\"114.8\" x2=\"227.3\" y2=\"113.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.3\" y1=\"113.5\" x2=\"228.9\" y2=\"113.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"228.9\" y1=\"113.5\" x2=\"229.7\" y2=\"114.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"114.8\" x2=\"228.9\" y2=\"116.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"228.9\" y1=\"116.2\" x2=\"229.7\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"117.5\" x2=\"231.2\" y2=\"117.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"231.2\" y1=\"117.5\" x2=\"232.0\" y2=\"118.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"232.0\" y1=\"118.9\" x2=\"231.2\" y2=\"120.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"231.2\" y1=\"120.2\" x2=\"229.7\" y2=\"120.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"120.2\" x2=\"228.9\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"228.9\" y1=\"121.6\" x2=\"229.7\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"122.9\" x2=\"231.2\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"231.2\" y1=\"122.9\" x2=\"232.0\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"232.0\" y1=\"121.6\" x2=\"233.6\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"233.6\" y1=\"121.6\" x2=\"234.4\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"122.9\" x2=\"233.6\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"233.6\" y1=\"124.3\" x2=\"234.4\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"125.6\" x2=\"235.9\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"235.9\" y1=\"125.6\" x2=\"236.7\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"236.7\" y1=\"127.0\" x2=\"235.9\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"235.9\" y1=\"128.3\" x2=\"234.4\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"128.3\" x2=\"233.6\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"233.6\" y1=\"127.0\" x2=\"232.0\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"232.0\" y1=\"127.0\" x2=\"231.2\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"231.2\" y1=\"128.3\" x2=\"229.7\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"128.3\" x2=\"228.9\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"228.9\" y1=\"127.0\" x2=\"229.7\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"125.6\" x2=\"228.9\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"228.9\" y1=\"124.3\" x2=\"227.3\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.3\" y1=\"124.3\" x2=\"226.6\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"226.6\" y1=\"125.6\" x2=\"227.3\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.3\" y1=\"127.0\" x2=\"226.6\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"226.6\" y1=\"128.3\" x2=\"225.0\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.0\" y1=\"128.3\" x2=\"224.2\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"224.2\" y1=\"127.0\" x2=\"222.7\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"127.0\" x2=\"221.9\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"128.3\" x2=\"220.3\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"128.3\" x2=\"219.5\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"127.0\" x2=\"220.3\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"125.6\" x2=\"221.9\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"125.6\" x2=\"222.7\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"124.3\" x2=\"221.9\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"122.9\" x2=\"220.3\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"122.9\" x2=\"219.5\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"121.6\" x2=\"220.3\" y2=\"120.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"120.2\" x2=\"219.5\" y2=\"118.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"118.9\" x2=\"218.0\" y2=\"118.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"118.9\" x2=\"217.2\" y2=\"120.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"120.2\" x2=\"218.0\" y2=\"121.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"121.6\" x2=\"217.2\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"122.9\" x2=\"215.6\" y2=\"122.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"122.9\" x2=\"214.8\" y2=\"124.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"124.3\" x2=\"215.6\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"125.6\" x2=\"217.2\" y2=\"125.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"125.6\" x2=\"218.0\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"127.0\" x2=\"217.2\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"128.3\" x2=\"215.6\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"128.3\" x2=\"214.8\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"127.0\" x2=\"213.3\" y2=\"127.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"127.0\" x2=\"212.5\" y2=\"128.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"128.3\" x2=\"213.3\" y2=\"129.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"129.7\" x2=\"212.5\" y2=\"131.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"131.1\" x2=\"210.9\" y2=\"131.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"131.1\" x2=\"210.2\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"132.4\" x2=\"210.9\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"133.8\" x2=\"212.5\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"133.8\" x2=\"213.3\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"132.4\" x2=\"214.8\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"132.4\" x2=\"215.6\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"133.8\" x2=\"214.8\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"135.1\" x2=\"215.6\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"136.5\" x2=\"217.2\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"136.5\" x2=\"218.0\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"137.8\" x2=\"217.2\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"139.2\" x2=\"215.6\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"139.2\" x2=\"214.8\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"137.8\" x2=\"213.3\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"137.8\" x2=\"212.5\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"139.2\" x2=\"210.9\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"139.2\" x2=\"210.2\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"137.8\" x2=\"210.9\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"136.5\" x2=\"210.2\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"135.1\" x2=\"208.6\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"135.1\" x2=\"207.8\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"136.5\" x2=\"208.6\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"137.8\" x2=\"207.8\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"139.2\" x2=\"206.2\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"139.2\" x2=\"205.5\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"140.5\" x2=\"206.2\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"141.9\" x2=\"207.8\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"141.9\" x2=\"208.6\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"143.2\" x2=\"207.8\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"144.6\" x2=\"206.2\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"144.6\" x2=\"205.5\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"143.2\" x2=\"203.9\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"143.2\" x2=\"203.1\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"144.6\" x2=\"203.9\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"145.9\" x2=\"203.1\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"147.3\" x2=\"201.6\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"147.3\" x2=\"200.8\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"200.8\" y1=\"148.6\" x2=\"201.6\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"201.6\" y1=\"150.0\" x2=\"203.1\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.1\" y1=\"150.0\" x2=\"203.9\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"203.9\" y1=\"148.6\" x2=\"205.5\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"205.5\" y1=\"148.6\" x2=\"206.2\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"206.2\" y1=\"150.0\" x2=\"207.8\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"150.0\" x2=\"208.6\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"148.6\" x2=\"207.8\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"207.8\" y1=\"147.3\" x2=\"208.6\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"208.6\" y1=\"145.9\" x2=\"210.2\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"145.9\" x2=\"210.9\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"147.3\" x2=\"210.2\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.2\" y1=\"148.6\" x2=\"210.9\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"210.9\" y1=\"150.0\" x2=\"212.5\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"212.5\" y1=\"150.0\" x2=\"213.3\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"213.3\" y1=\"148.6\" x2=\"214.8\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"148.6\" x2=\"215.6\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"150.0\" x2=\"217.2\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"150.0\" x2=\"218.0\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"148.6\" x2=\"217.2\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"147.3\" x2=\"215.6\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"147.3\" x2=\"214.8\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"214.8\" y1=\"145.9\" x2=\"215.6\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"215.6\" y1=\"144.6\" x2=\"217.2\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"144.6\" x2=\"218.0\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"143.2\" x2=\"217.2\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"217.2\" y1=\"141.9\" x2=\"218.0\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"218.0\" y1=\"140.5\" x2=\"219.5\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"140.5\" x2=\"220.3\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"141.9\" x2=\"219.5\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"143.2\" x2=\"220.3\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"144.6\" x2=\"221.9\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"144.6\" x2=\"222.7\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"145.9\" x2=\"221.9\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"147.3\" x2=\"220.3\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"147.3\" x2=\"219.5\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"219.5\" y1=\"148.6\" x2=\"220.3\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"220.3\" y1=\"150.0\" x2=\"221.9\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"221.9\" y1=\"150.0\" x2=\"222.7\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"222.7\" y1=\"148.6\" x2=\"224.2\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"224.2\" y1=\"148.6\" x2=\"225.0\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"225.0\" y1=\"150.0\" x2=\"226.6\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"226.6\" y1=\"150.0\" x2=\"227.3\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.3\" y1=\"148.6\" x2=\"226.6\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"226.6\" y1=\"147.3\" x2=\"227.3\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"227.3\" y1=\"145.9\" x2=\"228.9\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"228.9\" y1=\"145.9\" x2=\"229.7\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"147.3\" x2=\"228.9\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"228.9\" y1=\"148.6\" x2=\"229.7\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"150.0\" x2=\"231.2\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"231.2\" y1=\"150.0\" x2=\"232.0\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"232.0\" y1=\"148.6\" x2=\"233.6\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"233.6\" y1=\"148.6\" x2=\"234.4\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"150.0\" x2=\"235.9\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"235.9\" y1=\"150.0\" x2=\"236.7\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"236.7\" y1=\"148.6\" x2=\"235.9\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"235.9\" y1=\"147.3\" x2=\"234.4\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"147.3\" x2=\"233.6\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"233.6\" y1=\"145.9\" x2=\"234.4\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"144.6\" x2=\"233.6\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"233.6\" y1=\"143.2\" x2=\"232.0\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"232.0\" y1=\"143.2\" x2=\"231.2\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"231.2\" y1=\"144.6\" x2=\"229.7\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"144.6\" x2=\"228.9\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"228.9\" y1=\"143.2\" x2=\"229.7\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"229.7\" y1=\"141.9\" x2=\"231.2\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"231.2\" y1=\"141.9\" x2=\"232.0\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"232.0\" y1=\"140.5\" x2=\"231.2\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"231.2\" y1=\"139.2\" x2=\"232.0\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"232.0\" y1=\"137.8\" x2=\"233.6\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"233.6\" y1=\"137.8\" x2=\"234.4\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"139.2\" x2=\"235.9\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"235.9\" y1=\"139.2\" x2=\"236.7\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"236.7\" y1=\"137.8\" x2=\"235.9\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"235.9\" y1=\"136.5\" x2=\"234.4\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"136.5\" x2=\"233.6\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"233.6\" y1=\"135.1\" x2=\"234.4\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"234.4\" y1=\"133.8\" x2=\"235.9\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"235.9\" y1=\"133.8\" x2=\"236.7\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"236.7\" y1=\"132.4\" x2=\"235.9\" y2=\"131.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"235.9\" y1=\"131.1\" x2=\"236.7\" y2=\"129.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"236.7\" y1=\"129.7\" x2=\"238.3\" y2=\"129.7\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"238.3\" y1=\"129.7\" x2=\"239.1\" y2=\"131.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"239.1\" y1=\"131.1\" x2=\"238.3\" y2=\"132.4\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"238.3\" y1=\"132.4\" x2=\"239.1\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"239.1\" y1=\"133.8\" x2=\"240.6\" y2=\"133.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"240.6\" y1=\"133.8\" x2=\"241.4\" y2=\"135.1\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"241.4\" y1=\"135.1\" x2=\"240.6\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"240.6\" y1=\"136.5\" x2=\"239.1\" y2=\"136.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"239.1\" y1=\"136.5\" x2=\"238.3\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"238.3\" y1=\"137.8\" x2=\"239.1\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"239.1\" y1=\"139.2\" x2=\"240.6\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"240.6\" y1=\"139.2\" x2=\"241.4\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"241.4\" y1=\"137.8\" x2=\"243.0\" y2=\"137.8\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.0\" y1=\"137.8\" x2=\"243.8\" y2=\"139.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.8\" y1=\"139.2\" x2=\"243.0\" y2=\"140.5\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.0\" y1=\"140.5\" x2=\"243.8\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.8\" y1=\"141.9\" x2=\"245.3\" y2=\"141.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"245.3\" y1=\"141.9\" x2=\"246.1\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"246.1\" y1=\"143.2\" x2=\"245.3\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"245.3\" y1=\"144.6\" x2=\"243.8\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.8\" y1=\"144.6\" x2=\"243.0\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.0\" y1=\"143.2\" x2=\"241.4\" y2=\"143.2\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"241.4\" y1=\"143.2\" x2=\"240.6\" y2=\"144.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"240.6\" y1=\"144.6\" x2=\"241.4\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"241.4\" y1=\"145.9\" x2=\"240.6\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"240.6\" y1=\"147.3\" x2=\"239.1\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"239.1\" y1=\"147.3\" x2=\"238.3\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"238.3\" y1=\"148.6\" x2=\"239.1\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"239.1\" y1=\"150.0\" x2=\"240.6\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"240.6\" y1=\"150.0\" x2=\"241.4\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"241.4\" y1=\"148.6\" x2=\"243.0\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.0\" y1=\"148.6\" x2=\"243.8\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"243.8\" y1=\"150.0\" x2=\"245.3\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"245.3\" y1=\"150.0\" x2=\"246.1\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"246.1\" y1=\"148.6\" x2=\"245.3\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"245.3\" y1=\"147.3\" x2=\"246.1\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"246.1\" y1=\"145.9\" x2=\"247.7\" y2=\"145.9\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"247.7\" y1=\"145.9\" x2=\"248.4\" y2=\"147.3\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"248.4\" y1=\"147.3\" x2=\"247.7\" y2=\"148.6\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"247.7\" y1=\"148.6\" x2=\"248.4\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "<line x1=\"248.4\" y1=\"150.0\" x2=\"250.0\" y2=\"150.0\"\n",
       "    stroke=\"#663399\" stroke-width=\"2\" />\n",
       "\n",
       "<g transform=\"rotate(-90.0,250.0,150.0) translate(250.0, 150.0)\">\n",
       "    <circle stroke=\"#63A375\" stroke-width=\"2\" fill=\"transparent\" r=\"5.5\" cx=\"0\" cy=\"0\"/>\n",
       "    <polygon points=\"0,12 2,9 -2,9\" style=\"fill:#63A375;stroke:#63A375;stroke-width:2\"/>\n",
       "</g>\n",
       "\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "make_turtle(delay=0.01,height=300)\n",
    "\n",
    "draw_sierpinski(100, 3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7f4edf8",
   "metadata": {
    "tags": []
   },
   "source": [
    "[Think Python: 3rd Edition](https://allendowney.github.io/ThinkPython/index.html)\n",
    "\n",
    "Copyright 2024 [Allen B. Downey](https://allendowney.com)\n",
    "\n",
    "Code license: [MIT License](https://mit-license.org/)\n",
    "\n",
    "Text license: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "kernelspec": {
   "display_name": "cctbx",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
